spl*_*urf 0 javascript tcp tcplistener websocket rust
我有一个在本地托管的数据库,需要能够使用 JavaScript 访问该网站的https://nujabes.xyz/。对于服务器端,我使用 Rust 托管它,因为我的数据库就是用它编写的:
\nTCP 服务器Rust:
use std::{\n io::Read,\n net::{Shutdown::Both, TcpListener, TcpStream},\n thread::spawn,\n};\n\nfn handle_client(mut stream: TcpStream) {\n let mut data = [0 as u8; 50]; // using 50 byte buffer\n while match stream.read(&mut data) {\n Ok(_size) => {\n //println!("{:?}", String::from_utf8(data[0..size].to_vec()));\n\n // stream.write(&data[0..size]).unwrap();\n true\n }\n Err(_) => {\n println!(\n "An error occurred, terminating connection with {}",\n stream.peer_addr().unwrap()\n );\n stream.shutdown(Both).unwrap();\n false\n }\n } {}\n}\n\nfn main() {\n let address = "localhost";\n let port = "80";\n\n let listener = TcpListener::bind(format!("{}:{}", address, port)).unwrap();\n println!("{}", format!("Server listening on port {}", port));\n for stream in listener.incoming() {\n match stream {\n Ok(stream) => {\n println!("New connection: {}", stream.peer_addr().unwrap());\n spawn(move || {\n handle_client(stream);\n });\n }\n Err(e) => {\n println!("Error: {}", e);\n }\n }\n }\n // close the socket server\n drop(listener);\n}\nRun Code Online (Sandbox Code Playgroud)\n客户端Javascript:
function connect() {\n let address = "localhost";\n let port = "80";\n\n console.log(`Attempting to connect to ${address} at ${port}...`);\n let socket = new WebSocket(`wss://${address}:${port}`);\n\n socket.onmessage = function(event) {\n console.log(`Message :: ${event.data}`)\n };\n\n socket.onclose = function(event) {\n console.log(`Closed :: ${event.code} :: ${event.reason}`);\n };\n\n socket.onerror = function(error) {\n console.log(`Error :: ${error.message}`)\n };\n}\nRun Code Online (Sandbox Code Playgroud)\n按主页上的Login或Register按钮使其尝试连接后控制台的输出如下:
Attempting to connect to localhost at 80... main.js:8:13\nFirefox can\xe2\x80\x99t establish a connection to the server at wss://localhost:80/. main.js:9:17\nError :: undefined main.js:20:17\nClosed :: 1006 :: \nRun Code Online (Sandbox Code Playgroud)\n服务器端也有实际接收连接的反馈:
\nServer listening on port 80\nNew connection: [::1]:64374\nRun Code Online (Sandbox Code Playgroud)\n为什么连接不保持?Firefox 出现此错误是怎么回事?
\n上下文:我已经转发了端口80以及其他一些端口。
看起来你的服务器正在尝试使用常规的 TCP 套接字,而你的客户端代码正在使用WebSockets,它确实使用了 TCP 套接字,但在其之上分层了一个全新的协议。
连接确实建立了,但在客户端的 WebSocket 握手等过程中,连接失败并因此出错。
您最好找到一个 Rust 库,它允许您创建 WebSocket 服务器而不是常规套接字服务器。我认为客户端 JavaScript 甚至不能使用常规套接字。
| 归档时间: |
|
| 查看次数: |
1095 次 |
| 最近记录: |