gpt4 book ai didi

dart - Dart WebSocket是否不触发onOpen或onMessage事件?

转载 作者:行者123 更新时间:2023-12-03 03:28:42 25 4
gpt4 key购买 nike

我有以下客户端代码:

import 'dart:html';
import 'dart:async';

void main() {
WebSocket ws = new WebSocket('ws://127.0.0.1:4949');
ws.onOpen.listen((_) => print('open'));
ws.onMessage.listen((MessageEvent e) => print(e.data));
ws.onClose.listen((_) => print('closed'));
ws.onError.listen((_) => print('error'));
}

和此服务器端代码:

import 'dart:io';
import 'dart:async';

main() {
ServerSocket.bind('127.0.0.1', 4949).then((ServerSocket server) {
server.listen((Socket client){
print('Connection from '
'${client.remoteAddress.address}:${client.remotePort}');
client.write('hello from server');
});
});
}

WebSocket连接成功连接到ServerSocket。服务器代码显示:
Connection from 127.0.0.1:55516
GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: 127.0.0.1:4949
Origin: http://127.0.0.1:3030
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: PrJr2iVElmEsX7ZItHnWHA==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: x-webkit-deflate-frame
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.39 (Dart) Safari/537.36

问题是onOpen和onMessage不会被触发。我怀疑我错过了一些东西,但不确定。

最佳答案

是的,您缺少某些内容,即完整的服务器端实现。 ServerSocket只是用于TCP(或UDP)的普通套接字。

但是Websocket需要HTTP服务器,该服务器负责处理HTTP请求并将连接升级为Websocket连接:

import 'dart:io';

void main() {

HttpServer.bind('127.0.0.1', port)
.then((HttpServer server) {
print('listening for connections on $port');

server.listen((HttpRequest request) {
if (request.uri.path == '/ws') {
WebSocketTransformer.upgrade(request).then((WebSocket websocket) {
websocket.listen((message) => print('Message from client'));
print('Client connected');
});
} else {
/* ... */
}
});
},
onError: (error) => print("Error starting HTTP server: $error"));
}

SethLadd的一个简单示例。但是我可能还会在升级到Websocket之前检查 CONNECTIONUPGRADE header 的请求是否正确。升级连接后,您将拥有一个 Websocket 实例,该实例类似于客户端上的。

关于dart - Dart WebSocket是否不触发onOpen或onMessage事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20928688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com