Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请教如何使用gev做一个im。 #42

Closed
yiippee opened this issue Sep 25, 2020 · 5 comments
Closed

请教如何使用gev做一个im。 #42

yiippee opened this issue Sep 25, 2020 · 5 comments

Comments

@yiippee
Copy link

yiippee commented Sep 25, 2020

谢谢你分享的项目,最近在用gev和websocket做一个im的时候遇到一个问题,如何设计路由。我参考了你写的websocket例子,

type example struct{
	router map[int64]*connection.Connection // userId -> conn
}

router来维护整个用户和它连接的路由信息。
获取目标用户id,我是放在 OnMessage(c *connection.Connection, data []byte) 中第二个参数data中带进来的,就是说data数据也要结构化的,不知道这样做有没有问题啊?
另一个问题,OnClose(c *connection.Connection) 关闭一个连接的时候,只有conn,那如何在router里面清除这个连接归属用户的信息啊?还有用的网页在线websocket客户端断开连接的时候,好像没有触发OnClose,不知道是不是我改的有问题?
谢谢。

@Allenxuxu
Copy link
Owner

谢谢你分享的项目,最近在用gev和websocket做一个im的时候遇到一个问题,如何设计路由。我参考了你写的websocket例子,

type example struct{
	router map[int64]*connection.Connection // userId -> conn
}

router来维护整个用户和它连接的路由信息。
获取目标用户id,我是放在 OnMessage(c *connection.Connection, data []byte) 中第二个参数data中带进来的,就是说data数据也要结构化的,不知道这样做有没有问题啊?
另一个问题,OnClose(c *connection.Connection) 关闭一个连接的时候,只有conn,那如何在router里面清除这个连接归属用户的信息啊?还有用的网页在线websocket客户端断开连接的时候,好像没有触发OnClose,不知道是不是我改的有问题?
谢谢。

  • data数据本身就应该按自己的数据序列化使用
  • 第二个问题,我猜测是你的客户端没有真正断连接,建议你再测试一下

@yiippee
Copy link
Author

yiippee commented Sep 25, 2020

你好,感谢你的回复。
gev自带的websocket例子,我测过多次,还是无法触发OnClose,好像一直卡死在 Connection 的 handleClose中,而且connected没连接。
另外,OnClose(c *connection.Connection) 关闭一个连接的时候,只有conn,那如何在router里面清除这个连接归属用户的信息啊?你提到ctx可以存储业务信息,但是这个ctx已经用于标识websocket是否upgrade了。

@Allenxuxu
Copy link
Owner

你好,感谢你的回复。
gev自带的websocket例子,我测过多次,还是无法触发OnClose,好像一直卡死在 Connection 的 handleClose中,而且connected没连接。
另外,OnClose(c *connection.Connection) 关闭一个连接的时候,只有conn,那如何在router里面清除这个连接归属用户的信息啊?你提到ctx可以存储业务信息,但是这个ctx已经用于标识websocket是否upgrade了。

  • 你的是 mac 环境吗?
  • websocket 这个确实是我当初设计的不合理,刚改了一点,你可以看下这个 commit 117f75d ,改动不大。

@cs-charles
Copy link
Contributor

@Allenxuxu
Copy link
Owner

@cs-charles 可能是在线连接工具并没有断开链接

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants