我正在尝试做一个非常基本的网络套接字,但我不明白为什么我没有得到一个字符串。
我正在使用wsnpm 的模块作为服务器。https://github.com/websockets/ws
客户:
let socket = new WebSocket('wss://upload.lospec.com');
socket.addEventListener('open', function (event) {
socket.send('test');
});
Run Code Online (Sandbox Code Playgroud)
服务器:
const wss = new WebSocket.Server({ server });
wss.on("connection", function (ws) {
ws.on("message", function (asdfasdf) {
console.log("got new id from client",asdfasdf);
});
Run Code Online (Sandbox Code Playgroud)
服务器结果:
got new id from client <Buffer 74 65 73 74>
Run Code Online (Sandbox Code Playgroud)
尝试遵循文档上的示例以及本教程:https://ously.com/blog/web-app-websockets-nodejs
但它并没有像两个地方所承诺的那样像一条线一样出来。
为什么这不以字符串形式出现?
我尝试过使用不同的库和不同的实现,但我无法在 Rust 中获得有效的 WebSocket 客户端/侦听器。
我尝试编写一个处理程序:
extern crate ws;
use ws::{connect, listen, Handler, Sender, Handshake, Result, Message, CloseCode};
struct Client {
out: Sender,
}
impl Handler for Client {
fn on_open(&mut self, _: Handshake) -> Result<()> {
self.out.send(r#"{"action": "authenticate","data": {"key_id": "<API_KEY>","secret_key": "<API_SECRET>"}}"#);
self.out.send(r#"{"action": "listen","data": {"streams": ["AM.SPY"]}}"#)
}
fn on_message(&mut self, msg: Message) -> Result<()> {
println!("message: {}", msg);
Ok(())
}
}
fn main() {
if let Err(error) = listen("wss://data.alpaca.markets/stream", |out| {
Client { out: out }
}) {
println!("Failed to …Run Code Online (Sandbox Code Playgroud) 这是问题......当我在本地启动 React 应用程序时 npm start 。我没有连接失败。
如果我在 Docker 容器中启动 NGINX 和 React 服务器,我会不断得到
WebSocketClient.js:16 WebSocket 连接到“ws://localhost:3000/ws”失败:
默认配置文件
upstream client {
server client:3000;
}
upstream api {
server api:5000;
}
server {
listen 80;
location / {
proxy_pass http://client;
}
location /ws {
proxy_pass http://client;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
location /api {
rewrite /api/(.*) /$1 break;
proxy_pass http://api;
}
}
Run Code Online (Sandbox Code Playgroud) 我在服务器端使用ws包,我希望客户端在服务器套接字中创建/加入房间。以及当它们不再连接时如何将它们从创建的房间中删除。PS:我不想使用socketIo。
我正在尝试基于 websocket 制作实时应用程序并有两个选择。一个是socket.io,另一个是GraphQL Subscriptions。但很难找到这些之间的比较。
选择其中一种的标准是什么?性能上有什么区别吗?
如何使用 http 代理进行 Web 套接字以及下一个 js 重写。
对于流动示例,destination不以/、http://或开头。https://
{
"source":"/websocket",
"destination":"wss://some.domine.com/websocket"
}
Run Code Online (Sandbox Code Playgroud)
怎么解决呢?
我们在 Etherpad 中非常广泛地使用了 SocketIO(从很早开始),我们非常感谢团队为提供如此有用的东西所做的所有努力:)
Etherpad 是一个 nodejs 项目。
我的 SocketIO 问题可能是由于我配置错误或理解错误,但经过大量测试工具生成、内存设置调整等。我们仍然获得令人沮丧的每秒最大消息数,达到 10k 大关。
在线阅读看起来切换到 ws 的性能会更好,但我看不出在我们的场景中情况如何,我们的瓶颈不是协商(最终是 websockets)而是服务器每秒处理的消息。
我不愿意尝试其他软件包,所以我想我会来这里寻求一些见解或尝试看看我们是否可以通过很多方式提高性能......通常的节点技巧(访问更多硬件[ ram/cpu]) 有点帮助,但仍然感觉我们获得的收益非常小,而不是您在其他模块基准测试中看到的巨大数字。
这个问题的一个理想结果是让某人查看 Etherpad 代码并告诉我为什么我是个白痴,希望我们可以让 Etherpad 进入每秒 10 万次更改的竞争中,但我也可能对其他模块感到迷茫因此,如果有人有与 ws 之类的基准相矛盾的基准,那么我全神贯注。
我觉得我应该补充一点,我们进行了测试,看看是否是内部 Etherpad 逻辑造成的,但实际上不是,最终导致操作转换算法出现瓶颈的是通信层,我们有 99.95% 的把握。 .
在这个问题上扔更多的硬件不是解决方案,也不是任何反向代理/传递问题的方法。
我正在努力在 NestJS 7 中实现 Websocket 网关,如文档中所示。我使用 WS 适配器。
const app = await NestFactory.create(ApplicationModule);
app.useWebSocketAdapter(new WsAdapter(app));
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是网关接受连接,无论 url 是什么。例如,如果我像这样定义我的网关:
@WebSocketGateway(8080, {namespace: '/v3'}
export class MyGateway {}
Run Code Online (Sandbox Code Playgroud)
handleConnection然后,无论客户端请求的路径如何,都会触发该网关:
ws://localhost:8080/some-other-path
Run Code Online (Sandbox Code Playgroud)
不幸的是,这意味着所有客户端都连接到每个网关。命名空间选项仅适用于 socket.io 适配器吗?
请原谅我提出这个新手问题,但我很困惑,并且显然不理解如何使用托管在HTTPS. 我在网上找到的所有内容都让我的问题多于答案。
我的HTTPS网站上有一个使用 Java 代码托管的 Websocket 服务器。
这是我的WebsocketServer.java文件:
import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
import java.net.InetSocketAddress;
import java.util.HashSet;
import java.util.Set;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class WebsocketServer extends WebSocketServer {
private static final Logger logger = LogManager.getLogger(WebsocketServer.class);
private static int TCP_PORT = 6868;
private static Set<WebSocket> conns;
public WebsocketServer() {
super(new InetSocketAddress(TCP_PORT));
conns = new HashSet<>();
}
@Override
public void onOpen(WebSocket conn, ClientHandshake handshake) {
conns.add(conn);
logger.info("New connection from " + conn.getRemoteSocketAddress().getAddress().getHostAddress());
logger.info("Size of …Run Code Online (Sandbox Code Playgroud) 好吧,我正在尝试连接到此 websocket ws://rustypot.com/socket.io/?EIO=4&transport=websocket 但不断收到 403 禁止错误。我尝试使用 NodeJS 后端和 Postman 进行连接,结果相同。所以,当你遇到这样的问题时,你应该做的第一件事就是检查标题,我就是这么做的。我所有的标题都很好:
Error: Unexpected server response: 403
Handshake Details
Request URL: https://rustypot.com/socket.io/?EIO=4&transport=websocket
Request Method: GET
Status Code: 403 Forbidden
Request Headers
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: HeibSZt/sW4ivlyCkdN87g==
Connection: Upgrade
Upgrade: websocket
Origin: https://rustypot.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Host: rustypot.com
Response Headers
Date: Sun, 26 Jun 2022 14:48:11 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
CF-Chl-Bypass: 1
Permissions-Policy: accelerometer=(),autoplay=(),camera=(),clipboard-read=(),clipboard-write=(),fullscreen=(),geolocation=(),gyroscope=(),hid=(),interest-cohort=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),sync-xhr=(),usb=()
Cache-Control: private, max-age=0, …Run Code Online (Sandbox Code Playgroud) ws ×10
websocket ×7
node.js ×3
javascript ×2
socket.io ×2
benchmarking ×1
cloudflare ×1
docker ×1
etherpad ×1
java ×1
nestjs ×1
next.js ×1
nginx ×1
performance ×1
reactjs ×1
rust ×1