[英]How to connect to local TCP WebSocket via Javascript?
我有一個我在本地托管的數據庫,需要能夠使用 Javascript 訪問它,我有這個網站https://nujabes.xyz/ 。 對於服務器端,我使用 Rust 托管它,因為我的數據庫是用它編寫的:
TCP 服務器Rust
:
use std::{
io::Read,
net::{Shutdown::Both, TcpListener, TcpStream},
thread::spawn,
};
fn handle_client(mut stream: TcpStream) {
let mut data = [0 as u8; 50]; // using 50 byte buffer
while match stream.read(&mut data) {
Ok(_size) => {
//println!("{:?}", String::from_utf8(data[0..size].to_vec()));
// stream.write(&data[0..size]).unwrap();
true
}
Err(_) => {
println!(
"An error occurred, terminating connection with {}",
stream.peer_addr().unwrap()
);
stream.shutdown(Both).unwrap();
false
}
} {}
}
fn main() {
let address = "localhost";
let port = "80";
let listener = TcpListener::bind(format!("{}:{}", address, port)).unwrap();
println!("{}", format!("Server listening on port {}", port));
for stream in listener.incoming() {
match stream {
Ok(stream) => {
println!("New connection: {}", stream.peer_addr().unwrap());
spawn(move || {
handle_client(stream);
});
}
Err(e) => {
println!("Error: {}", e);
}
}
}
// close the socket server
drop(listener);
}
客戶端Javascript
:
function connect() {
let address = "localhost";
let port = "80";
console.log(`Attempting to connect to ${address} at ${port}...`);
let socket = new WebSocket(`wss://${address}:${port}`);
socket.onmessage = function(event) {
console.log(`Message :: ${event.data}`)
};
socket.onclose = function(event) {
console.log(`Closed :: ${event.code} :: ${event.reason}`);
};
socket.onerror = function(error) {
console.log(`Error :: ${error.message}`)
};
}
按主頁上的Login
或Register
按鈕以使其嘗試連接后,控制台的輸出如下:
Attempting to connect to localhost at 80... main.js:8:13
Firefox can’t establish a connection to the server at wss://localhost:80/. main.js:9:17
Error :: undefined main.js:20:17
Closed :: 1006 ::
服務器端也有實際接收連接的反饋:
Server listening on port 80
New connection: [::1]:64374
為什么連接不保持? 這個 Firefox 錯誤是怎么回事?
上下文:我已經轉發了端口80
以及其他一些端口。
看起來您的服務器正在嘗試使用常規 TCP 套接字,而您的客戶端代碼正在使用WebSockets ,它確實使用了 TCP 套接字,但在此之上分層了一個全新的協議。
連接確實建立了,但是在客戶端的 WebSocket 握手等過程中,它失敗並因此出錯。
您最好找到一個 Rust 庫,它允許您創建 WebSocket 服務器而不是常規套接字服務器。 我不認為客戶端 JavaScript 甚至可以使用常規套接字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.