【发布时间】:2020-12-23 19:11:47
【问题描述】:
我正在学习 nodejs,我想在 Flutter 应用程序和 nodejs 服务器之间创建实时通信。两者都在本地工作。
这是我的 socket.js 文件。我正在使用 express 和 socket io。 (表示稍后。休息)
const app = require('express')()
const http = require('http').createServer(app)
app.get('/', (req, res) => {
res.send("Server is running")
})
//Socket Logic
const socketio = require('socket.io')(http)
socketio.on("connection", (userSocket) => {
console.log('a user connected');
userSocket.on("message", (data) => {
userSocket.broadcast.emit("receive_message", data)
})
})
http.listen(3000,(s)=>{
console.log("server is listening at 3000");
});
我的 Flutter 使用了 socket_io_client 包。当我运行我的应用程序时,什么也没发生,它们之间也没有任何联系。
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:socket_io_client/socket_io_client.dart' as IO;
String uri = 'http://localhost:3000';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String message;
IO.Socket socket;
StreamController<String> _socketResponse;
@override
void initState() {
super.initState();
_socketResponse = StreamController();
socket = IO.io(
'http://locaost:3000',
IO.OptionBuilder()
.setTransports(['websocket']) // for Flutter or Dart VM
.setExtraHeaders({'foo': 'bar'}) // optional
.build());
socket.onConnect((data) {
print('connectend');
print(data);
socket.emit('message', 'tester');
});
socket.on('event', (data) => _socketResponse.sink.add(data));
message = 'Hello ';
}
@override
void dispose() {
_socketResponse.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: StreamBuilder<String>(
stream: _socketResponse.stream,
builder: (context, snapshot) {
return Center(
child: Text(snapshot.data ?? socket.connected.toString()),
);
}),
),
);
}
}
编辑: 我将我的服务器文件上传到 Heroku,现在它正在工作。我认为网络政策有问题。
【问题讨论】:
-
“本地”是指在一台计算机上还是仅在同一网络中?
-
电脑上的@MindStudio。
-
尝试使用您的 node.js 服务器正在侦听的计算机的 IP,而不是 localhost。在本地网络上。