node.js - Flutter with Node Socket IO 在模拟器上工作但在真实设备上不工作
问题描述
服务器端节点 socket.io = ^2.0.3
flutterSide flutter_socket_io: ^0.6.0
颤振端代码
import 'dart:convert';
import 'package:flutsocketchat/models/local/localMessage.dart';
import 'package:flutsocketchat/models/user.dart';
import 'package:flutsocketchat/providers/local/localMessageStoreProvider.dart';
import 'package:flutsocketchat/screens/homePage.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_socket_io/flutter_socket_io.dart';
import 'package:flutter_socket_io/socket_io_manager.dart';
class ChatFunctionsProvider with ChangeNotifier {
final String currentUserID = HomePage.currentUSerId;
final localMessageStorageProvider = LocalMessageStoreProvider();
//Getter And Setter For Users
List<User> _userList = [
User("Sonu", "111"),
User("Monu", "222"),
User("Gonu", "333"),
User("Tonu", "444"),
];
List<User> get mates =>
_userList.where((user) => user.id != currentUserID).toList();
SocketIO socketIO;
//Initialize Socket
void initSocket() {
socketIO = SocketIOManager().createSocketIO(
'http://198.158.275.132:5050',
'/',
query: 'chatID=${HomePage.currentUSerId}',
);
socketIO.init();
//Receive Message Function
socketIO.subscribe('receive_message', (jsonData) {
Map<String, dynamic> data = json.decode(jsonData);
localMessageStorageProvider.addMessageInStore(
LocalMessage(
receiver: data['receiverChatID'],
text: data['content'],
sender: data['senderChatID'],
),
);
notifyListeners();
});
socketIO.connect();
}
// Send Message Function
void sendMessage(String text, String receiverChatID) {
localMessageStorageProvider.addMessageInStore(LocalMessage(
sender: currentUserID,
text: text,
receiver: receiverChatID,
));
socketIO.sendMessage(
'send_message',
json.encode({
'receiverChatID': receiverChatID,
'senderChatID': currentUserID,
'content': text,
}),
);
notifyListeners();
}
destroySocket() {
if (socketIO != null) {
SocketIOManager().destroySocket(socketIO);
}
}
}
服务器端代码
const app = require('express')()
const http = require('http').createServer(app)
const io = require('socket.io')(http);
app.get('/', (req, res) => {
res.send("Node Server is running. Yay!!")
})
io.on('connection', socket => {
//Get the chatID of the user and join in a room of the same name
let chatId = socket.handshake.query.chatID
console.log(chatId +" is Online")
// socket.on('createRoom', currentUserID =>{
// console.log(currentUserID +" is Online")
// })
//join The Room
socket.join(chatId)
//Leave the room if the user closes the socket
socket.on('disconnect', () => {
socket.leave(chatId)
})
//Send message Event
socket.on('send_message', message => {
console.log(message)
receiverChatID = message.receiverChatID
senderChatID = message.senderChatID
content = message.content
//Send message to only that particular id
socket.in(receiverChatID).emit('receive_message', {
'content': content,
'senderChatID': senderChatID,
'receiverChatID': receiverChatID,
})
})
});
http.listen(5050, () => {
console.log("Server is Running at port 5050")
})
此代码在模拟器中完美运行,并且无法在真实设备上运行......也没有显示错误日志......当我们在真实设备上运行它时,它甚至没有连接到套接字。
解决方案
推荐阅读
- javascript - 在构建 .exe 文件时拖动文件或文件夹不启动应用程序
- c# - IConfiguration:意外的 GetValue 行为
- url-routing - 赛普拉斯根据请求存根 XHR 响应
- php - PHP mail() 函数问题
- php - Laravel Socialite 停止工作:“Socialite 驱动程序 [zoom] 不支持”
- vue.js - 如何在 iview 表的列中显示数据列表
- python - Gunicorn 和自定义记录器
- javascript - vue-splide 仅适用于 Nuxt 开发环境
- python - 烧瓶 - jinja2.exceptions.TemplateNotFound
- java - 为什么没有 LinkedList.join() 方法可以在 O(1) 时间内合并两个未排序的列表?