GoLang Socket.io Emit 没有被 React 接收
Posted
技术标签:
【中文标题】GoLang Socket.io Emit 没有被 React 接收【英文标题】:GoLang Socket.io Emit not Being Recieved by React 【发布时间】:2021-12-31 23:22:35 【问题描述】:我是 golang 的新手,我没有找到最新版本的发射和广播示例的其他变体:https://github.com/googollee/go-socket.io/,它是 golang 的 socketio 库之一。
首先是我的 golang 代码,取自示例:
func InitSessionServer()
server := socketio.NewServer(&engineio.Options
Transports: []transport.Transport
&polling.Transport
CheckOrigin: allowOriginFunc,
,
&websocket.Transport
CheckOrigin: allowOriginFunc,
,
,
)
server.OnConnect("/", func(s socketio.Conn) error
s.SetContext("")
log.Println("connected:", s.ID())
return nil
)
server.OnEvent("/", "status", func(s socketio.Conn, msg string)
log.Println("Message ", msg)
s.Emit("reply", msg)
)
server.OnError("/", func(s socketio.Conn, e error)
log.Println("meet error:", e)
)
server.OnDisconnect("/", func(s socketio.Conn, reason string)
log.Println("closed", reason)
)
go func()
if err := server.Serve(); err != nil
log.Fatalf("socketio listen error: %s\n", err)
()
defer server.Close()
http.Handle("/socket.io/", server)
log.Println("Serving at localhost:8000...")
log.Fatal(http.ListenAndServe(":8000", nil))
所以它非常基本。我们将status
事件作为本实验的主要焦点。在我的假设中,因为这是一个套接字服务器。每当我将某些东西传递给status
事件时,例如在iocat
中,这是一个您可以在Linux 终端上测试您的套接字的工具
npx iocat --socketio ws://127.0.0.1:8000/ -e status
> test
这意味着 status
事件收到测试并将其发送到 reply
然后我的反应应用程序将收到来自端口的回复并显示消息的内容。因此我的反应套接字实现如下:
import useState, useEffect from 'react'
import io from 'socket.io-client'
const BROADCAST_SERVER_URL = 'http://192.168.1.12:8000/'
export const event_server = io(BROADCAST_SERVER_URL,
transports: ['websocket'],
)
event_server.on('reply', function(msg)
console.log('Status changed', msg)
);
event_server.on('connect', () =>
console.log('connected')
)
event_server.on('disconnect', () =>
console.log('broadcast server disconnected')
)
event_server.on('connect_error', response =>
console.log(response)
)
function Socket( children )
return children
export default Socket
我现在真的很迷茫为什么reply
没有收到任何东西。知道为什么它不起作用吗?顺便说一句,我在 connect
上登录了 react,我得到了 connected
日志。我很头疼为什么我不能得到发出的回复。
ADDTL:正如您在上面看到的,我有一个printLn
,它确实显示了测试消息。除了它正在发出时,我在 React 上看不到它
【问题讨论】:
【参考方案1】:在那个 github 包中,io 是 var 而不是 const。
var socket = io();
socket.on('reply', function(msg)
$('#messages').append($('<li>').text(msg));
);
我认为你可以尝试将其转换为 var。
【讨论】:
以上是关于GoLang Socket.io Emit 没有被 React 接收的主要内容,如果未能解决你的问题,请参考以下文章
Android socket.IO中的Emit或Ack超时处理?