websocket+html5开发聊天室。为什么会出现空连接的情况

问题描述

应该不是服务端问题贴客户端代码,js部分。框架应该没问题<head><title>聊天室</title><metacontent="text/html;charset=gbk"http-equiv="Content-Type"><linkrel="stylesheet"type="text/css"href="css/css.css"/><scriptsrc="js/jquery.js"type="text/javascript"></script><scripttype="text/javascript">varurl="192.168.1.22:9898/chat";varname;$(function(){varWebSocketsExist=true;try{vardummy=newWebSocket("ws://"+url);}catch(ex){try{webSocket=newMozWebSocket("ws://"+url);}catch(ex){WebSocketsExist=false;}}if(WebSocketsExist){Log("您的浏览器支持本聊天工具.您可以输入姓名后,点击"开始"尝试连接到聊天服务器!","OK");name=Math.floor(Math.random()*(1000000+1));$("#txtName").val(name)$("#txtName").change(function(){try{if(SocketCreated){SocketCreated=false;isUserloggedout=true;ws.close();$("#btnIn").val("开始");}else{name=$("#txtName").val();}}catch(ex){}});$("#btnIn").click(function(){if($("#txtName").val()==""||$("#txtName").val().trim()==""){alert("你叫什么?");return;}if($(this).val()=="开始"||$(this).val()=="连接"){$("#txtName").attr("disabled","disabled");ToggleConnectionClicked();}else{ToggleConnectionClicked();$("#txtName").removeAttr("disabled");}})}else{Log("您的浏览器不支持WebSocket。请选择其他的浏览器再尝试连接服务器。","ERROR");}$("#txtEdit").keypress(function(evt){if(evt.keyCode==13){$("#sendMsg").click();evt.preventDefault();}})})functionSendMsg(){}varws;varSocketCreated=false;varisUserloggedout=false;functionToggleConnectionClicked(){if(SocketCreated&&(ws.readyState==0||ws.readyState==1)){Log("离开聊天室...");SocketCreated=false;isUserloggedout=true;ws.close();}else{try{if("WebSocket"inwindow){ws=newWebSocket("ws://"+url+'?name='+escape(document.getElementById("txtName").value));}elseif("MozWebSocket"inwindow){ws=newMozWebSocket("ws://"+url+'?name='+escape(document.getElementById("txtName").value));}SocketCreated=true;isUserloggedout=false;}catch(ex){Log(ex,"ERROR");return;}$("#btnIn").val("断开");ws.onopen=WSonOpen;ws.onmessage=WSonMessage;ws.onclose=WSonClose;ws.onerror=WSonError;}};functionWSonOpen(){Log("连接已经建立。","OK");//$("#SendDataContainer").show();ws.send("login:"+name);};functionWSonMessage(event){//alert(event.data);varjsonobj=event.data;if(jsonobj.indexOf("活跃用户")>-1){varjs=jsonobj.replace(/,/g,'<br>');userLog(js);}else{Log(jsonobj);}};functionWSonClose(){if(isUserloggedout){Log("【"+name+"】离开了聊天室!");}name=$("#txtName").val();$("#btnIn").val("连接");//$("#SendDataContainer").hide();};functionWSonError(){Log("远程连接中断。","ERROR");name=$("#txtName").val();$("#btnIn").val("连接");};functionSendDataClicked(){if($("#tors").val()==""){if(document.getElementById("txtEdit").value.trim()!=""){ws.send($("#txtEdit").val());//ws.send("<div>"+name+":"+$("#txtEdit").val()+"</div>");document.getElementById("txtEdit").value="";}}else{if(document.getElementById("txtEdit").value.trim()!=""){ws.send($("#txtEdit").val()+""+"@#$%^&*()"+$("#txtName").val()+"@#$%^&*()"+$("#tors").val()+"");document.getElementById("txtEdit").value="";}}};functionLog(Text,MessageType){if(MessageType=="OK")Text="<spanstyle='color:green;'>"+Text+"</span>";if(MessageType=="ERROR")Text="<spanstyle='color:red;'>"+Text+"</span>";$("#txtShow").prepend("<div>"+Text+"</div>");//if($("#txtShow").find("div").length>20){//$("#txtShow").html("");//}};functionuserLog(Text){Text="<spanstyle='color:red;'>"+Text+"</span>";document.getElementById("users").innerHTML=Text+"<br/>";varusers=document.getElementById("users");users.scrollTop=users.scrollHeight;};functionClear(){$("#txtShow").html("")}</script></head>

解决方案

解决方案二:
在你的userLog(js);语句上设置断点,并且为断点设置“条件表达式”为js.length()<4之类的,然后开始手动测试执行,看看能不能中断(自动进入调试模式)呗。或者你也可以在服务器端设置相同的中断机制,然后手动执行,尽量让问题尽早重现出来。
解决方案三:
其实说过很多次了,程序员编写代码根本不算什么本事,至少需要会调试。而仅仅贴出一堆代码,这是很给别人找麻烦的。你要先调试了,然后贴出你的调试之后的问题。不要说你“不知道如何为javascript设置断点、写条件中断表达式”,如果你的开发工具(例如vs)不具有高级的javascript调试、中断、变量监视、调用堆栈跟踪调试、web输出控制台查看、dom数据结构树查看等等功能,就不用玩儿开发了。其中最基本的一个功能,就是给javascrit代码设置调试中断点,并且给这个断点写一个条件表达式。
解决方案四:
受教了......
解决方案五:
引用1楼sp1234的回复:

在你的userLog(js);语句上设置断点,并且为断点设置“条件表达式”为js.length()<4之类的,然后开始手动测试执行,看看能不能中断(自动进入调试模式)呗。或者你也可以在服务器端设置相同的中断机制,然后手动执行,尽量让问题尽早重现出来。

我调试过了。在服务端就存在空连接,只是不知道空连接是怎么来的

时间: 2024-09-17 04:11:28

websocket+html5开发聊天室。为什么会出现空连接的情况的相关文章

使用Java和WebSocket实现网页聊天室实例代码_java

在没介绍正文之前,先给大家介绍下websocket的背景和原理: 背景 在浏览器中通过http仅能实现单向的通信,comet可以一定程度上模拟双向通信,但效率较低,并需要服务器有较好的支持; flash中的socket和xmlsocket可以实现真正的双向通信,通过 flex ajax bridge,可以在javascript中使用这两项功能. 可以预见,如果websocket一旦在浏览器中得到实现,将会替代上面两项技术,得到广泛的使用.面对这种状况,HTML5定义了WebSocket协议,能更

php基于websocket搭建简易聊天室实践_php实例

本文实例讲述了php基于websocket搭建简易聊天室实践.分享给大家供大家参考.具体如下:1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短连接和长连接.短连接一般可以用ajax实现,长连接就是websocket.短连接实现起来比较简单,但是太过于消耗资源.websocket高效不过兼容存在点问题.websocket是html5的资源 2.前端

php基于websocket搭建简易聊天室实践

本文实例讲述了php基于websocket搭建简易聊天室实践.分享给大家供大家参考.具体如下: 1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短连接和长连接.短连接一般可以用ajax实现,长连接就是websocket.短连接实现起来比较简单,但是太过于消耗资源.websocket高效不过兼容存在点问题.websocket是html5的资源 2.前

请问聊天室系统用什么语言开发好呢?是PHP好?还是ASP开发聊天室好呢?

问题描述 是PHP好?还是ASP开发聊天室好呢? 解决方案 解决方案二:下载一个最好!!!解决方案三:LS的太水了..我觉得ASP好解决方案四:哪个熟练哪个写自己写的最好解决方案五:语言不是关键,关键是你能更熟练的运用哪个用哪个··

WebSocket实现网页聊天室

1.先看演示效果,如下: 2.websocket 技术背景 我们知道,传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如浏览器)主动发起,服务端进行处理后返回response结果,而服务端很难主动向客户端发送数据:这种客户端是主动方,服务端是被动方的传统Web模式对于信息变化不频繁的Web应用来说造成的麻烦较小,而对于涉及实时信息的Web应用却带来了很大的不便,如带有即时通信.实时数据.订阅推送等功能的应用.在WebSocket规范提出之前,开发人员若要实现这些实时性较强的

用java WebSocket做一个聊天室_java

最近一个项目中,需要用到Java的websocket新特性,于是就学了一下,感觉这技术还挺好玩的,瞬间知道网页上面的那些在线客服是怎么做的了. 先看图: 实现了多客户机进行实时通讯. 下面看代码项目结构图:很简单,就1个类,1个页面 然后看具体代码 先看后端代码 package com.main; import java.io.IOException; import java.util.concurrent.CopyOnWriteArraySet; import javax.websocket.

用asp.net2.0开发聊天室

问题描述 情况这样:现在想做一个聊天室,不是公共聊天室,是像QQ一样的点对点私聊,现在有几个问题解决不了.1.发送信息的问题,这个我现在想了两个办法,一个是用户A向用户B发送信息,先把信息传入数据库,用户B再向数据库中取数据.这样做肯定不好,性能很低.第二个办法是用tcpclient,服务器监听某端口,收到用户的信息后再转发.这样做效果也不是很好,客户端用AJAX不停地向服务器获取数据,弄得还经常死机.2.在线用户列表的问题,这个不知道用什么办法能将误差减少到最低来获取客户是否在线.以上两个问题

基于Tomcat7、Java、WebSocket的服务器推送聊天室实例_java

前言 HTML5 WebSocket实现了服务器与浏览器的双向通讯,双向通讯使服务器消息推送开发更加简单,最常见的就是即时通讯和对信息实时性要求比较高的应用.以前的服务器消息推送大部分采用的都是"轮询"和"长连接"技术,这两中技术都会对服务器产生相当大的开销,而且实时性不是特别高.WebSocket技术对只会产生很小的开销,并且实时性特别高.下面就开始讲解如何利用WebSocket技术开发聊天室.在这个实例中,采用的是Tomcat7服务器,每个服务器对于WebSoc

基于Swoole实现PHP与websocket聊天室_php实例

websocket Websocket只是一个网络通信协议 就像 http.ftp等都是网络通信的协议:不要多想: 相对于HTTP这种非持久的协议来说,Websocket是一个持久化网络通信的协议: WebSocket和HTTP的关系 有交集,但是并不是全部. Websocket只是借用了HTTP的一部分协议来完成一次握手.(HTTP的三次握手,此处只完成一次) http和websocket 请求头对比: HTTP: 原来的时候,客户端通过http(骑马)带着信请求服务器,服务器处理请求(写回信