回答
這是一個非常簡單的例子,使用std::net
。它是針對當前的Rust大師開發的,並且應該在1. *上工作。
小心這個例子;它被簡化了;如果綁定,收聽或接受產生錯誤,您可能不希望它恐慌。
use std::io::Write;
use std::net::TcpListener;
use std::thread;
fn main() {
let listener = TcpListener::bind("127.0.0.1:9123").unwrap();
println!("listening started, ready to accept");
for stream in listener.incoming() {
thread::spawn(|| {
let mut stream = stream.unwrap();
stream.write(b"Hello World\r\n").unwrap();
});
}
}
請注意關於接受的範例;你必須自己發起accept()
請求(在這個例子中,我們使用incoming()
迭代器,每次只調用accept()
),所以你得到real控制哪些任務。因此,我將實際的流處理代碼放入一個單獨的線程中,但它不需要用於非常短的請求(這只是意味着您在處理第二個請求時不能處理第二個請求第一);你可以刪除關於這兩條線的thread::spawn(|| { ... })
。使用額外的線程也會產生一定的隔離度;如果線程展開,整個服務器將不會死亡(但要記住,內存不足或在解繞過程中發生崩潰會導致整個服務器死機)。
此代碼不再編譯,請你更新它? (我會,但我不知道如何產生任務) –
@JeroenBollen:已更新。 –
它再次不能在master上編譯。我認爲TcpListener轉移到了std :: net,但它似乎也改變了進程產生和流寫入 – wump
簡單TCP回聲服務器https://gist.github.com/seriyps/fd6d29442e16c44ba400
#![feature(phase)]
#[phase(plugin, link)] extern crate log;
extern crate green;
extern crate rustuv;
use std::io;
use std::os;
use std::io::{Listener,Acceptor,TcpStream};
// This is for green threads. If removed, will spawn 1 OS thread per client.
#[start]
fn start(argc: int, argv: *const *const u8) -> int {
green::start(argc, argv, rustuv::event_loop, main)
}
fn main() {
let host = "127.0.0.1";
let port = 8080;
let sock = io::TcpListener::bind(host, port).unwrap();
let mut acceptor = sock.listen();
for stream in acceptor.incoming() {
match stream {
Err(e) => warn!("Accept err {}", e),
Ok(stream) => {
spawn(proc() {
debug!("{}", handle_client(stream));
})
}
}
}
}
fn handle_client(mut stream: io::TcpStream) -> io::IoResult<()> {
info!("New client {}", stream.peer_name());
let mut buf = [0u8, ..4096];
loop {
let got = try!(stream.read(buf));
if got == 0 {
// Is it possible? Or IoError will be raised anyway?
break
}
try!(stream.write(buf.slice(0, got)));
}
Ok(())
}
這不再有效 - 請參閱我的評論[這裏](https://gist.github.com/seriyps/fd6d29442e16c44ba400#gistcomment-1562789)爲什麼。 – ferrouswheel
- 1. 需要用Python編寫的POP3服務器或IMAP服務器的示例
- 2. 部署一個用Ruby編寫的TCP服務器
- 3. nodejs TCP服務器的水平比例
- 4. 使用Wcf服務的Tcp服務器
- 5. 在C編寫的Linux TCP/IP服務器中處理Ctrl-C
- 6. 寫入tcp服務器 - 緩衝流
- 7. Assync TCP服務器的代碼示例分析
- 8. Web服務TCP服務器
- 9. Qt - 編寫多個TCP服務器程序
- 10. 在Linux上編寫多線程TCP服務器
- 11. 精煉服務器/客戶端TCP套接字示例
- 12. Java TCP服務器
- 13. Python TCP服務器
- 14. TCP服務器 - 服務器通信
- 15. 打印我的TCP TCP服務器C
- 16. 與Rust服務器的榆木websockets
- 17. Java中的TCP服務器
- 18. Node.js的TCP服務器EACCESS
- 19. Android的TCP服務器
- 20. WebExtension中的TCP服務器
- 21. FinalBuilder服務器+ FastMM4示例
- 22. Zend Soap服務器示例
- 23. 問題用C編寫的服務器顯示BMP圖像
- 24. FTP服務器用C#編寫
- 25. 使用Lua編寫Proxy/Caching服務器!
- 26. 如何TCP服務器永遠服務?
- 27. 用於TCP流的STUN服務器
- 28. 什麼語言被用來編寫Rust編譯器?
- 29. Java.net服務器示例不起作用
- 30. tcp服務器ip地址
https://gist.github.com/thomaslee/4753338 – rags
@rags:你應該是 –
@rags的答案:其實,我決定修復它適用於Rust 0.7並自行發佈 - 如果您渴望,可隨時自行回答,我將刪除它的副本。你的要點也可以做更新。 –