当前标签: websocket

推荐一些socket工具,TCP、UDP调试、抓包工具04/16/2013

还记得我在很久很久以前和大家推荐的FiddlerCharles debugger么?他们都是HTTP的神器级调试工具,非常非常的好用。好工具能让你事半功倍,基本上,我是属于彻头彻尾的工具控。

假如有一天,你写“传统”的PHP有些累了,想玩玩socket了,搞搞python、NodeJS、GO之类的新兴语言或框架(当然我不是说这些语言不能写web),或者干脆就用PHP吧,事实上PHP5.4的性能提高的真是相当之多,用PHP 的socket函数就能简单的写一个web socket服务器 (代码在评论里)了,甚至有个很不错的PHP框架—— swoole,他和其他的大多数常见的框架都不同,因为他不依赖http服务器!号称高级开发框架,“目标是向Java框架、Rails On Ruby、Python Django Pylons等一流框架发起挑战”的一种以socket方式运行的PHP框架。还有一个叫nanoserv,……我说这么多就是为了证明PHP也能玩好socket的,所以socket以及TCP、UDP都是平易近人的。

说工具
让我膜拜一下全文吧 »

| 4条评论分类: 互联网2.0,有得下载哦 标签:  

web socket 心跳包的实现方案05/30/2010

现在网络环境错综复杂,socket心跳包是获得健康强壮的连接的有效解决方案,今天,我们就在web socket中实现心跳包方案,是的,尽管我们只是做一个简单的聊天室,但我们让他稳定可靠一些一点也没有错。

我的心跳包方案很是简单,原理就是间隔发送心跳包数据给服务器,服务器在一定时间内发回心跳包响应,对比超时限定,如果超过设定的超时时间,则认为当前与服务器的websocket连接已经断开,关闭当前web socket连接,善后处理,例如重新连接,或者弹出提示……

比较有用的核心代码是这样子的:

function keepalive( ws ){
	var time = new Date();
	if( last_health != -1 && ( time.getTime() - last_health > health_timeout ) ){
			//此时即可以认为连接断开,可设置重连或者关闭连接
			$("#keeplive_box").html( "服务器没有响应." ).css({"color":"red"});
			//ws.close();
	}
	else{
		$("#keeplive_box").html( "连接正常" ).css({"color":"green"});
		if( ws.bufferedAmount == 0 ){
			ws.send( '~H#C~' );
		}
	}
}

这就是心跳函数,发送心跳包和检测心跳健康度。我们将其植入到websocket的onopen事件中,来开启心跳检测。像这样:

var ws = new WebSocket( to_url );
  ws.onopen=function(){
		$("#statustxt").html("connected.");
		$("#send_btn").attr("disabled", false);
		heartbeat_timer = setInterval( function(){keepalive(ws)}, 1000 );
	}

是的,这样子就可以实现web socket的心跳包,这里有些类似于多线程的发送方式,在发送心跳包的同时,并不影响正常的数据通信,我们的例子还是以上次的websocket聊天室来改进,我们可以发现,心跳包运行过程中,并不会干扰到我们的正常聊天。服务端我也进行了一些修改,原理类似,在超过一定时间内都没有收到客户端发来的心跳包,则认为该客户端已经掉线,关闭连接,收回资源。

Demo在这里:https://www.zendstudio.net/libs/websocket/chat/demo2.html

现在,有一个新的问题出现,如果我们要用php socket来模拟心跳包技术,该怎么实现?各位路过的朋友请多指教,感恩戴德。

| 3条评论分类: web前端编程,互联网2.0,网络通信协议 标签:  

websocket 通信协议(已更新到version 13)05/11/2010

UPDATE:前些天有网友mail和我讨论websocket协议,当时颇忙!更惭愧的是,此篇文章竟已不能使用,原因是当时我写的还是websocket草稿时候的协议!终于,我将websocket 协议更新到了version 13版本 —–2012.5.19

websocket通信协议实现的是基于浏览器的原生socket,在客户端用JS即可轻松完成,前些天都在学习websocket 协议(但实际上websocket 协议甚为简约),并且粗略的思考过websocket的对于下一代web应用会产生怎样的影响,我想最大的巨变应该是就是实时性上吧!另外诸如上传大文件之类的优于http的应用。但问题也随之而来,服务端怎么办?前些天我弄了个websocket 聊天室的demo,现在还得在服务器上专门开个进程来跑呢,也许到时候不再是简单架设个web server就能跑应用的了。也许过不了多久,会出不同的服务端方案吧!先期待一下。

websocket的协议是很简单的,这里我把它分成客户端和服务端来讲。在客户端,new WebSocket即可实例化一个新的websocket对象,但其参数略微有一点不一样,参数格式是这样的ws://yourdomain:port/path ,这个从我的聊天室demo里面就可以轻松看出(ws = new WebSocket( “ws://www.zendstudio.net:9108/chat” ); ),WebSocket对象会自动解析这段字符串,发送到指定服务器端口,首先执行的是双方握手(handshake),客户端发送数据格式类似这样: 竟有如此美文,尽阅之 »

| 28条评论分类: web前端编程,互联网2.0,网络通信协议 标签:  

弄了个websocket 聊天室玩玩05/09/2010

今天,我写了个websocket的聊天室demo,实践之后感觉这个东西实现的长连接着实很有诱惑力,在数据量的传输上,除了第一次的handshake,其余的每次传输只在原数据头尾分别加上”\x00″和”\xFF”两个字符(除此之外,和socket便没有任何差别),这个和ajax的传输不太一样,后者属于http协议,因此每次都会带有的头信息。

websocket的协议颇为简单,在第一次handshake通过以后,便建立连接,其后的通讯数据都是以”\x00″开头,以”\xFF”结尾。在客户端,这个是透明的,websocket组件会自动将原始数据“掐头去尾”。

好吧!看看我写的简陋的demo吧(PS:请使用chrome 4.0以上版本来打开页面):
https://www.zendstudio.net/libs/websocket/chat/demo1.html

| 14条评论分类: web前端编程,互联网2.0,网络通信协议 标签:  

html5带您进入“云游戏”时代04/22/2010

html5的巨大影响已经越来越无法让人们忽略了,几个牛逼的demo出尽了风头,大家谈论web的东西也越来越多的涉及html5,这个下一代的web标准,她强调的原生概念深入人心,乔布斯帮主犀利的指出导致safari崩溃的罪魁祸首乃是flash插件的言论并非空穴来风,我们也常常在web game中感到flash插件略微的有些捉襟见肘。尽管flash显然在目前比html4+js的解决方案看上去要优秀的多,当然互联网上根本不乏优秀的成功的flash game,甚至“社区游戏”(例如开心农场),但人们往往想做的更好。

于是,html5逐渐的进入人们的视野,到了目前这个让人无法忽略的地位。更为激动人心的不仅仅是html5实现了原生视频播放这么简单代替flash,而webGL绝对是个震撼的体验!

WebGL实现了真正的3D,这项技术如果应用到web game中,那简直就是个颠覆性的效果,我们的web game完全和大型网游之间毫无差别,而且还不用去下载客户端,轻松跨平台。看看这几个关于webGL的demo吧!这真的太不可思议了。

在web game中,基于http的无状态连接有时候着实让我们头疼,我们需要socket,这样可以让我们的游戏运行的更顺畅,负载更小,我们的服务器能同时支持的在线数将更多,游戏体验也会更好!可这些在目前的浏览器上无法直接实现,我们的聊天室实在没有办法基于http,只好使用flash socket + JS的解决方案来让聊天室可以使用。而下一代的web标准,也就是html5中,将加入websocket,这是一个支持长连接的socket底层实现,让我们可以创建自己的通信,这对游戏太重要了,加上她,我们就可以完全的宣布,web game不再和大型网游有什么区别了!现在,我们基于http协议的web game要不断的去通过一个seesion令牌来验证玩家的合法性,验证提交数据的有效性,还有只能通过客户端向服务器“拉”数据,不能“推”数据的机制让很多功能开发起来非常吃力,出来的效果却不甚满意,有了websocket,很多头疼问题都将迎刃而解。

使用html5的webGL、webSocket将可以实现web游戏的最佳体验,说起来都令人热血沸腾啊。也许在不久的将来,就会有一款这样的web game 上线,所有的东西都在云端,玩游戏只要打开网页就行,跨浏览器,跨平台,随时随地玩游戏!这就是“云游戏”时代。

当然,html5普及还有很多的工作要做,浏览器的支持,硬件加速,网络带宽……等等等等,还有很长的一段路要走。另外,flash也不会那么快的死掉,flash game目前在国内相当成功,相当火爆,AS的程序员也是相当吃香的,毕竟flash这项技术目前很成熟,有很多资深的开发人员,有很强大的IDE,Adobe公司也没有放弃研发,继续寻找着先进的技术来改进flash,使他支持的东西更多。

html5的IDE会是Dreamweaver么?那不还是adobe的东西?呜呼!作为adobe公司,你好纠结啊,哥们。

| 3条评论分类: web前端编程,互联网2.0 标签:  

PHP界大牛们
反人类不分昼夜
牛掰级朋友圈子