Cra*_*cin 4 node.js socket.io flutter
我正在尝试使用 node.js 匹配服务器构建一个简单的 flutter 聊天应用程序。我已经处理了几个小时了,但我无法让应用程序与服务器连接。
这是 Node.js 服务器:
var express=require('express');
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var allClients = {};
io.on('connection', function (socket) {
io.to(socket.id).emit('userCount', Object.keys(allClients).length);
console.log(socket.id,'joined');
//match making logic
});
var port = 8080;
console.log(port);
server.listen(port);
Run Code Online (Sandbox Code Playgroud)
颤振连接代码:
//Find a match for the user
void findMatch() async {
SocketIO socketIO = SocketIOManager().createSocketIO("http://192.168.0.32:8080", "/");
print('Created');
await socketIO.init(); //code execution pauses indefinitely at this line
print('Initialized');
await socketIO.connect();
print('Connected');
socketIO.sendMessage('new user', data);
socketIO.subscribe('match found', (data) async {
UserData peerData = await getUserData(data.peerId);
redirectToPage(context, Chat(peerId: data.peerId, peerData: peerData));
});
}
Run Code Online (Sandbox Code Playgroud)
当函数运行时,代码执行在上面所示的行处暂停,并且 Node js 服务器根本没有反应。但是这会显示在调试控制台上。
D/FlutterSocketIoPlugin: FlutterSocketIoPlugin( 4490): onMethodCall: socketInit - domain: http://192.168.0.32:8080 - with namespace: /
D/FlutterSocketIoPlugin: TOTAL SOCKETS: ( 4490): 0
D/FlutterSocketIoPlugin: TOTAL SOCKETS: ( 4490): 0
D/FlutterSocketIoPlugin: added SocketIO( 4490): http://192.168.0.32:8080/
D/FlutterSocketIoPlugin: SocketIO( 4490): connecting...null
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏。谢谢你!
我按照评论中的建议编写了一个简单的 Node js 客户端,它成功连接到服务器。
//client.js
var io = require('socket.io-client');
var socket = io.connect('http://localhost:8080', {reconnect: true});
// Add a connect listener
socket.on('connect', function (socket) {
console.log('Connected!');
});
socket.emit('CH01', 'me', 'test msg');
Run Code Online (Sandbox Code Playgroud)
编辑:
在 findMatch() 中的套接字函数之前删除“await”可以让我得到这个。
D/FlutterSocketIoPlugin: SocketIO(21368): reconnect_error: [{"cause":{"cause":{"detailMessage":"CLEARTEXT communication to 192.168.0.32 not permitted by network security policy","stackTrace":[],"suppressedExceptions":[]},"detailMessage":"websocket error","stackTrace":[],"suppressedExceptions":[]},"detailMessage":"Connection error","stackTrace":[],"suppressedExceptions":[]}]
Run Code Online (Sandbox Code Playgroud)
我尝试android:usesCleartextTraffic="true"了一下,AndroidManifest.xml但似乎不起作用。将 http 更改为 https 给出SSL handshake aborted. 也许使用 SSL 证书在远程计算机上部署套接字服务器会起作用?会继续挖掘。
小智 10
Downgrading我的服务器socket.io version为我工作。就像上面一样,如果您正在使用,请nodejs尝试卸载 socket.io 并安装旧版本,如下所示:
npm uninstall socket.io
npm install socket.io@2.3.0
Run Code Online (Sandbox Code Playgroud)
大多数 flutter socket io 客户端包都与socket.io version 2.3.0. 如果您遇到类似的问题,我建议您降级到此。
我在这里尝试了使用此 flutter 插件的上述代码,因为我认为您也在使用相同的代码,但我也遇到了同样的问题。我试图查看由 生成的任何错误日志Logcat,我发现了一个条目connecting...null,它被卡在那里,但不知道如何修复或问题出在哪里。我在此处使用另一个 flutter 插件进行了尝试,并在模拟器中对其进行了测试,它在以下示例代码中运行良好。如果您可以使用不同的 flutter 插件,那么这可能很有用。
var express = require('express');
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
io.on('connection', function (socket) {
console.log(socket.id, 'joined');
socket.on('/test', function (msg) {
console.log(msg);
});
});
var port = 8080;
console.log(port);
server.listen(port);
Run Code Online (Sandbox Code Playgroud)
Flutter 客户端代码 -
IO.Socket socket = IO.io('http://10.0.2.2:8080', <String, dynamic>{
'transports': ['websocket'],
'autoConnect': false,
});
socket.connect();
socket.emit('/test', 'test');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4550 次 |
| 最近记录: |