默认
发表评论 11
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已解决] MobileIMSDK server和java版Demo死机的问题
原想把Server以ServletContextListener 形式与Web应用集成,但用java版Demo测试时总是死机。直接使用Server的Demo,java版Demo也会死机只是频率低了,不知什么原因。两个图片分别是死机时的java客户端和服务器的日志(其中aaa就是第一个死机的用户)。发现Demo死机的规律,好像服务器启完后,快速启java客户端登录就容易死机,如果多等会就没事。

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

error1.jpg (22.21 KB, 下载次数: 3116)

error1.jpg

error2.jpg (248.39 KB, 下载次数: 3067)

error2.jpg
上一篇:[已解决] MobileIMSDK在有线连接的Android上不能正确判断网络连接事件下一篇:关于MobileIMSDK如何保证数据有序性的问题。
推荐方案
评论 11
你的log上看不出异常。

你说的“死机”是什么情况?JVM崩溃?还是程序卡住?

另外,你需要列出你的java详细版本(包括是32位还是64位),还有windows的详细版本(包括是32位还是64位)。我帮你诊断看看。
JVM没有崩溃,是java客户端程序卡住,关闭按钮什么的无法操作。客户端登陆后应该进入主窗口,程序卡在登录窗口中,如上图。jdk1.6 32位。开发机是win7 32位,服务器和客户端暂时在开发机运行。
引用:盛涛 发表于 2017-03-03 09:47
JVM没有崩溃,是java客户端程序卡住,关闭按钮什么的无法操作。客户端登陆后应该进入主窗口,程序卡在登录 ...

我没看明白你到底是客户端卡住还是服务端卡住。
刚试了下,直接运行Demo服务器和java客户端Demo没有再现上面现象。但用Demo服务器加上java客户端Demo源码编译后的程序确实有上面现象。而且奇怪的是前者分配的id为17170等,后者分配的是10001.
是客户端卡住
引用:盛涛 发表于 2017-03-03 10:23
刚试了下,直接运行Demo服务器和java客户端Demo没有再现上面现象。但用Demo服务器加上java客户端Demo源码编 ...

你这说的到底是什么跟什么,我也没分清。
你把要表述的内容整理一下呢,到底是什么跟什么。
虽然你绕来绕去我没看明白你的精确表述,不过,我可以很有把握的告诉你,卡住应该是客户端卡住了。

客户端卡住的原因是:
因为Swing这种GUI程序,UI线程调度跟后台线程交叉进行,是有发生死锁的风险(至于为什么,这就需要对Swing非常精通才能理解),也就是那段把log显示到JTextPane的代码导致的,你把log显示到JTextPane的代码注释掉或改进直接输出到控制台下,应该就不会卡了。

写这个demo我为了简化理解,没有处理这个多线程的风险而已,最佳实践是:有Log输出的时候不应该由网络后台直接调用ui显示方法,而应该搞一个中间队列,一个生产一个消费,两边各自的线程不会有直接交叉,就不会有卡住风险了。不信你试试
不管如何,感谢您认真的态度,并表达对您技术能力的敬仰。
刚试了下,果真如此,感谢
引用:盛涛 发表于 2017-03-03 13:11
刚试了下,果真如此,感谢

能解决就好
引用:盛涛 发表于 2017-03-03 13:01
不管如何,感谢您认真的态度,并表达对您技术能力的敬仰。

互相学习,过奖了
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部