在群里面看到的关于socketcc的讨论(select即可啊)

手游开发小虾米:  19:57:12

大家有没有使用过socketcc,小弟我现在碰到一个比较奇怪的问题,

当用send函数发送稍微大点的数据的时候,socket会被死锁,导致程序无法继续,大家有什么见解吗


手游开发小虾米:  20:01:13

稍微debug了一下,发现死锁貌似是有recive函数造成的,可是服务器端并没有返回过东西

咣当朱:  20:01:49

恐怕就是因为服务器没返回才死锁的。

咣当朱:  20:03:11

recieve一般是block的。如果不用多线程,后果就是等。

服务器快速反馈就等的短,服务器反馈慢,就等超时。


手游开发小虾米:  20:04:22

嗯,receve函数是在别的线程里的,并没有在主线程里的


手游开发小虾米:  20:05:58

现在的死锁就是,socketcc貌似还给socket加了一个锁,不明白为什么,其中一次调用receve调用后,

receve就把socket锁住了导致了send函数不能使用socket来发送东西


手游开发小虾米:  20:08:59

网上查了好久都没有找到原因,大家开发COCOS2D-X的时候用的是什么socket呢,

我觉得socketcc太难用了,现在用js在写游戏,考虑到要bingding的话实在不知道选什么样socket比较好


水产店:  20:12:16

libuv..


手游开发小虾米:  20:12:58

@水产店:   这个是什么语言的啊


笑靥:  20:13:59

receve 的时候 你是不是调用的 RecvASCII?


手游开发小虾米:  20:15:18

没有呢,我用的是网上最常见的一段代码做的测试,int iBytesRec=mysocket->RecvData(pcRecvBuf, MAX_RECV_SIZE); 用的是这个函数做的接受


淡淡的:  20:16:08

把锁的那2行代码注掉


笑靥:  20:16:25

你打个断点进去 单步执行就知道了, 封装没有问题的。我就用的这个  


笑靥:  20:16:38

看看锁哪儿了 


水产店:  20:17:05

c++的


笑靥:  20:17:28

你recv是不是阻塞的?


手游开发小虾米:  20:17:32

嗯,现在是把那锁的代码注释了@淡淡的:  不知道会不会存在问题


手游开发小虾米:  20:17:50

@笑靥:   不是的


笑靥:  20:18:13

它 发送和接收是用的同一个锁。发的时候不能收, 收的时候不能发  、


手游开发小虾米:  20:18:41

@笑靥: 我看了断点,rev锁住了socket,然后send就把主线程给阻塞了


手游开发小虾米:  20:18:51

@笑靥:  嗯,是的额


笑靥:  20:19:23

哪你的recv就是阻塞形式的了   不要用这种方式 


手游开发小虾米:  20:20:48

@笑靥:  恩恩,这样啊,明白了,我去改一下代码,之前学的网络的知识都忘得差不多了,

看来要去补补,谢谢你,我先去试一下看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值