多浏览器窗口接收websocket服务器推送消息问题

xiaoqi774 2014-12-29 02:24:57
请教大家一个问题,希望大家不吝赐教

现状:
已经成功的建立websocket连接,并且在单浏览器窗口下可以收到websocket服务器推送过来的消息

问题:
当其他用户在新的浏览器窗口建立相同连接时,连接可以建立
但是收不到服务器发送来的数据,evt.data打印出来是空的

这个问题困扰了2天了,有谁知道任何有关这个问题的思路或者想法可以讲一下么,谢谢了

客户端代码很简单,贴一下,console.log是测试代码

var socket = new WebSocket('ws://'+window.location.host + rootPath +'/websocket');

socket.onopen = function(event){
console.log('step in onpen function);
console.log(event.data);
};
...全文
1537 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoqi774 2015-01-05
  • 打赏
  • 举报
回复
问题已经解决,通过抓包发现websocket连接及发送均为正常,感谢版主xmt1139057136提供思路 问题出在服务器端内容发送环节,因为不太了解websocket发送机制,这个错误看起来有点犯2 下面贴出代码,希望出现同样问题的各位有个参考, 服务器端使用的是tomcat7.0以上版本websocket


public void sendMsg(String msg) {

		StreamInbound streamInbound = null;
		
                //此处为错误代码,问题出现原因是在for循环外调用了wrap方法,结果在发送后buffer自动被清空
                //但是不会引起程序的异常,所以看起来就像我提到的那个现象,略坑。。。
		//CharBuffer buffer = CharBuffer.wrap(msg);

		for(int i=0;i<streamInbounds.size();i++){

                        // streamInbounds记录的是当前进行连接的客户端个数
                        // 用以确保每个客户端都能接受服务器发送的消息
                        // 声明方式为 public static Vector<StreamInbound> streamInbounds = new Vector<StreamInbound>();
			streamInbound = streamInbounds.get(i);
			try {
                               // 将wrap方法移动到for循环内,每次都重新进行赋值,问题解决
				CharBuffer buffer = CharBuffer.wrap(msg);
				streamInbound.getWsOutbound().writeTextMessage(buffer);
				
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
再次感谢版主xmt1139057136
xiaoqi774 2015-01-05
  • 打赏
  • 举报
回复
引用 4 楼 xmt1139057136 的回复:
抓包工具有没有用过。推荐wireshark。下载地址:http://rj.baidu.com/soft/detail/15788.html?ald 教程地址:http://www.cr173.com/html/20128_all.html 抓一下数据包分析一下,看看是否是服务器发送了消息,还是服务器发送的就是空消息。 预测:我预测估计是你的服务器端出现了问题,只是可能性更大。其他没有更好的解释了。
非常抱歉回帖这么晚,这几天放假身体不舒服,一直请假到现在 还没用过抓包工具测试抓包内容,我试一下,先结贴好了,如果问题解决了我在下面回复解决办法及问题原因 感谢版主大力支持
业余草 2014-12-30
  • 打赏
  • 举报
回复
抓包工具有没有用过。推荐wireshark。下载地址:http://rj.baidu.com/soft/detail/15788.html?ald 教程地址:http://www.cr173.com/html/20128_all.html 抓一下数据包分析一下,看看是否是服务器发送了消息,还是服务器发送的就是空消息。 预测:我预测估计是你的服务器端出现了问题,只是可能性更大。其他没有更好的解释了。
xiaoqi774 2014-12-30
  • 打赏
  • 举报
回复
引用 1 楼 xmt1139057136 的回复:
事件 描述 onopen 当通往服务器的连接被打开 onmessage 当接收到消息 onerror 当错误发生 看看是否发生了错误!!!!!
今天看了一下,没有错误信息,而且onmessage也接收到消息了,就是消息内容是空。有点郁闷
xiaoqi774 2014-12-29
  • 打赏
  • 举报
回复
引用 1 楼 xmt1139057136 的回复:
事件 描述 onopen 当通往服务器的连接被打开 onmessage 当接收到消息 onerror 当错误发生 看看是否发生了错误!!!!!
额,刚看到回复,下午忙了一下午,没来得及看帖子,版主别激动,我去看看有没有错误信息。。。
业余草 2014-12-29
  • 打赏
  • 举报
回复
事件 描述 onopen 当通往服务器的连接被打开 onmessage 当接收到消息 onerror 当错误发生 看看是否发生了错误!!!!!

39,087

社区成员

发帖
与我相关
我的任务
社区描述
HTML5是构建Web内容的一种语言描述方式。HTML5是互联网的下一代标准,是构建以及呈现互联网内容的一种语言方式.被认为是互联网的核心技术之一。
社区管理员
  • HTML5社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧