I SOLVED MY PROBLEM WİTH THİS CODE BLOCK var io = require('socket.io')(server, { pingInterval: 10000, pingTimeout: 5000, }).listen(server)
我正在使用socket.io制作聊天应用程序。但是,如果我在15或20秒内没有发生事件,则我的应用将断开与socket.io的连接。我只想在应用关闭时断开连接
服务器端代码;
var server = http.createServer(app);
var io = require('socket.io').listen(server);
io.on('connection', function(socket){
let chatroom;
console.log("User Connected");
io.sockets.emit('connected', "12345");
socket.on('chatRoom', function(room) {
socket.join(room);
chatroom = room;
});
socket.on('messageData', function(msg){
io.sockets.in(chatroom).emit('messageData', msg);
});
socket.on('disconnect', function(msg){
console.log("User DisConnected");
});
});
客户端套接字类
import React, { Component } from 'react';
import io from "socket.io-client";
class socketio extends Component{
static socketConnect = () =>{
this.socket=io("http://xxx.xxx.xxx.xxx:3000",{jsonp:false});
}
static getSocket = () =>{
return this.socket;
}
}
export default socketio;
客户端聊天屏幕代码;
import socketio from '../Classes/socketio';
this.socket = socketio.getSocket();
this.socket.emit('chatRoom', this.state.chatID);
this.socket.on("messageData",(data) =>{
});
答案 0 :(得分:0)
您在静态方法中的远箭头函数中使用this
确实非常令人困惑。 this
值很可能是模块中的this
值,可能是module
本身。无论如何,那都不是存放套接字的好地方,而且非常混乱。
我不知道这是否可以解决您的主要问题,但是您可以通过更改为this
,静态方法和粗箭头功能来解决此问题:
import React, { Component } from 'react';
import io from "socket.io-client";
// module level variable, can only be one connected socket with this design
let socket;
class socketio extends Component{
static function socketConnect() {
socket = io("http://xxx.xxx.xxx.xxx:3000",{jsonp:false});
}
static function getSocket() {
if (!socket) {
throw new Error("Must call socketConnect() before getSocket()");
}
return socket;
}
}
export default socketio;
就我个人而言,我不知道为什么要使用一种将您限制为一个连接的设计,而不是创建您的类的实例,然后让该实例存储套接字,但是鉴于您倾向于仅设计一个连接,您可以像上面一样将其设置为模块级变量。