Есть ли простой способ получить внешний IP-адрес системы в Rust? [Дубликат]

Если таблица имеет шесть столбцов, и все они доступны для поиска, я должен индексировать их все или ни один из них

. Вы ищете по полю по полю или некоторые поиски с использованием нескольких полей? Какие поля находятся в в большинстве ? Каковы типы полей? (Индекс лучше работает на INT, чем на VARCHAR, например) Пробовали ли вы использовать EXPLAIN для выполняемых запросов?

Каковы влияющие на индексирование результаты индексирования

UPDATE и INSERT будут медленнее.

Если у меня есть столбец VARCHAR 2500, который можно найти на сайтах моего сайта, я должен индексировать его

/ blockquote>

Нет, если это не UNIQUE (это означает, что оно уже проиндексировано), или вы только выполняете поиск точных совпадений в этом поле (не используя полнотекстовый поиск LIKE или mySQL).

< blockquote>

Как правило, я помещаю индекс в любые поля, которые я буду искать или выбирать с помощью предложения WHERE

. Я бы обычно индексировал поля, которые наиболее опрошены, а затем INTs / BOOLEANs / ENUM скорее поля, которые являются VARCHARS. Не забывайте, часто вам нужно создать индекс в комбинированных полях, а не индекс в отдельном поле. Используйте EXPLAIN и проверьте медленный журнал.

37
задан Alex Dean 4 January 2013 в 11:50
поделиться

3 ответа

Обновление: Этот ответ относится к довольно древней истории. Для текущей лучшей практики, пожалуйста, посмотрите на ответ Исаака Аггрея .


Я работал над rust-http , который имеет стать де-факто HTTP-библиотекой для Rust (Servo использует ее); это далеко не полный и очень плохо документированный в настоящее время. Вот пример выполнения запроса и выполнения чего-то со статусом:

extern mod http;
use http::client::RequestWriter;
use http::method::Get;
use http::status;
use std::os;

fn main() {
    let request = RequestWriter::new(Get, FromStr::from_str(os::args()[1]).unwrap());
    let response = match request.read_response() {
        Ok(response) => response,
        Err(_request) => unreachable!(), // Uncaught condition will have failed first
    };
    if response.status == status::Ok {
        println!("Oh goodie, I got me a 200 OK response!");
    } else {
        println!("That URL ain't returning 200 OK, it returned {} instead", response.status);
    }
}

Запустите этот код с URL-адресом в качестве единственного аргумента командной строки, и он проверит код состояния! [HTTP], нет HTTPS.)

Сравните с src/examples/client/client.rs для примера, который делает немного больше.

rust-http отслеживает основную ветвь ржавчины. В настоящее время он будет работать в только что выпущенном Rust 0.8, но, скорее всего, скоро будут изменения. На самом деле, никакая версия ржавчины-http не работает на Rust 0.8 - произошли изменения, которые не могут быть обработаны в правилах конфиденциальности непосредственно перед выпуском, оставляя что-то, что ржавчина-http зависит от дополнительного :: url недоступного , С тех пор оно было исправлено, но оно не совместимо с ржавчиной. Rust 0.8.


Что касается вопроса о кодировке строки запроса, в настоящее время это должно быть сделано с помощью extra::url::Query (typedef для ~[(~str, ~str)]). Соответствующие функции для конверсий:

19
ответ дан Peter Hall 24 August 2018 в 23:52
поделиться

Использование привязок. Вставьте это в свой Cargo.toml:

[dependencies.curl]
git = "https://github.com/carllerche/curl-rust"

... и это в src/main.rs:

extern crate curl;

use curl::http;

fn main(){
  let resp = http::handle()
    .post("http://localhost:3000/login", "username=dude&password=sikrit")
    .exec().unwrap();

  println!("code={}; headers={}; body={}",
    resp.get_code(), resp.get_headers(), resp.get_body());    

}
8
ответ дан dvdplm 24 August 2018 в 23:52
поделиться

Самый простой способ сделать HTTP в Rust - reqwest .

Hyper - популярная HTTP-библиотека для Rust и использует две библиотеки: Tokio , чтобы сделать неблокирующие запросы и фьючерсы-rs для фьючерсов / обещаний. Пример Hyper приведен ниже и во многом вдохновлен примером в его документации .

// Rust 1.19, Hyper 0.11, tokio-core 0.1, futures 0.1

extern crate futures;
extern crate hyper;
extern crate tokio_core;

use futures::{Future};
use hyper::{Client, Uri};
use tokio_core::reactor::Core;

fn main() {
    // Core is the Tokio event loop used for making a non-blocking request
    let mut core = Core::new().unwrap();

    let client = Client::new(&core.handle());

    let url : Uri = "http://httpbin.org/response-headers?foo=bar".parse().unwrap();
    assert_eq!(url.query(), Some("foo=bar"));

    let request = client.get(url)
        .map(|res| {
            assert_eq!(res.status(), hyper::Ok);
        });

    // request is a Future, futures are lazy, so must explicitly run
    core.run(request).unwrap();
}

В Cargo.toml:

[dependencies]
hyper = "0.11"
tokio-core = "0.1"
futures = "0.1"

Для потомков я оставил свой первоначальный ответ ниже, но см. выше для обновления для Rust 1.19 (последняя стабильная версия на момент написания этой статьи).

Я верю, что вы поиск находится в стандартной библиотеке . теперь в rust-http и ответ Криса Моргана является стандартным способом в текущем Rust в обозримом будущем. Я не уверен, как далеко я могу вас принять (и надеюсь, что я не поймаю вас в неправильном направлении!), Но вам нужно что-то вроде:

// Rust 0.6 -- old code
/*
extern mod std;

use std::net_ip;
use std::uv;

fn main() {
    let iotask = uv::global_loop::get();
    let result = net_ip::get_addr("www.duckduckgo.com", &iotask);

    io::println(fmt!("%?", result));
 }
 */
Что касается кодирования, есть несколько примеров в модульных тестах в SRC / libstd / net_url.rs.

26
ответ дан Jeff Allen 24 August 2018 в 23:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: