问题描述
我在使用 Socket.IO 跨客户端和服务器发送消息时遇到问题
我的 Socket.IO 服务器是使用 Netty Socket IO https://github.com/mrniko/netty-socketio 实现的,如下所示:
我的配置文件:
@Configuration
class SocketIOConfig(
@Value("\${socketio.host}")
val host: String,@Value("\${socketio.port}")
val port: Int,@Value("\${socketio.bossCount}")
val bossCount: Int,@Value("\${socketio.workCount}")
val workCount: Int,@Value("\${socketio.allowCustomrequests}")
val allowCustomrequests: Boolean,@Value("\${socketio.upgradeTimeout}")
val upgradeTimeout: Int,@Value("\${socketio.pingTimeout}")
val pingTimeout: Int,@Value("\${socketio.pingInterval}")
val pingInterval: Int
) {
@Bean
fun socketIOServer(): SocketIOServer {
val socketConfig = SocketConfig()
socketConfig.isTcpNoDelay = true
socketConfig.soLinger = 0
val config = com.corundumstudio.socketio.Configuration()
config.socketConfig = socketConfig
config.hostname = host
config.port = port
config.bossthreads = bossCount
config.workerThreads = workCount
config.isAllowCustomrequests = allowCustomrequests
config.upgradeTimeout = upgradeTimeout
config.pingTimeout = pingTimeout
config.pingInterval = pingInterval
return SocketIOServer(config)
}
}
这是我的 application.properties
文件:
socketio.host=localhost
socketio.port=8888
socketio.maxFramePayloadLength=1048576
socketio.maxHttpContentLength=1048576
socketio.bossCount=1
socketio.workCount=100
socketio.allowCustomrequests=true
socketio.upgradeTimeout=1000000
socketio.pingTimeout=6000000
socketio.pingInterval=25000
这是我的 SocketIOService
课
@Service(value = "socketIOService")
class SocketIOServiceImpl {
@Autowired
private lateinit var socketIOServer: SocketIOServer
private val logger = LoggerFactory.getLogger(SocketIOServiceImpl::class.java)
@postconstruct
private fun autoStartup() {
start()
}
@PreDestroy
private fun autoStop() {
stop()
}
private fun getIpByClient(client: SocketIOClient): String {
val sa = client.remoteAddress.toString()
return sa.substring(1,sa.indexOf(":"))
}
fun start() {
socketIOServer.addConnectListener { client: SocketIOClient ->
logger.info("A Client has Connected {}",client)
client.sendEvent("game","What's Up Man")
}
socketIOServer.adddisconnectListener { client: SocketIOClient ->
val clientIp: String = getIpByClient(client)
logger.info("$clientIp Client disconnected")
client.disconnect()
}
socketIOServer.addEventListener(
"test",String::class.java
) { socketIOClient,data,ackRequest ->
logger.info("An event was sent from a client with data = $data")
}
socketIOServer.start()
}
fun pushMessagetoAllConnectedClients(game: Game) {
socketIOServer.broadcastOperations.sendEvent("game",game)
}
fun stop() {
socketIOServer.stop();
}
}
现在,我在 socket.io-client
js 库的帮助下连接了 ReactJS 客户端,如下所示:
const initSocketIO = () => {
const socket = io("http://localhost" + ":8888");
socket.on('connect',(data: any) => {
console.log("I am connected!");
socket.io.emit("test","Test Event!");
})
socket.on("game",(data: any) => {
console.log("New SocketIO Data Received as: ");
});
}
useEffect(() => {
initSocketIO();
},[loaded]);
运行应用后,ReactJS 客户端连接到服务器,服务器检测到并记录
2021-01-19 00:46:53.514 INFO 168 --- [ntLoopGroup-3-3] c.c.c.services.socketIOServiceImpl : A Client has Connected com.corundumstudio.socketio.transport.NamespaceClient@4e0db1c5
然而事件来回并没有被接收。
可能有什么问题?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)