收藏一个东西:基于websocket的RPC和pub/sub协议
[url]http://wamp.ws/ [/url] 构建在websocket之上的RPC协议和pub/sub协议
[url]http://wamp.ws/ [/url] 构建在websocket之上的RPC协议和pub/sub协议
摘自: http://www.javaworld.com/javaworld/jw-02-2009/jw-02-servlet3.html?page=2 Service streaming (streaming) allows a server to send a message to a client when an event occurs, without an explicit request from the client. In real-world implementations, the client initiates a connection to the server through a request, and the response returns bits and pieces each time a server-side event occurs; the response …
作用:A Ping frame may serve either as a keepalive or as a means to verify that the remote endpoint is still responsive. Ping和Pong的关系: 1. Upon receipt of a Ping frame, an endpoint MUST send a Pong frame in response… 2. A Pong frame sent in response to a Ping frame must have identical …
关于握手,转一张 图: 连接建立后,客户端和服务端就可以 全双工地通迅。 数据传输以"message"为单位. 一个message由一个或多个frame组成,每个frame等于一个 header + payload.
首先要明白websocket不是http协议,只不过有些相似的地方: 报文格式相似(但不相同),都被浏览器支持,服务商品都是80等。 而comet是基于http协议的. 再推荐一篇文章,里面总结了websocket相比于comet在性能方面的优点: Ajax、Comet、HTML 5 Web Sockets技术比较分析
普通的传输是指发送方会在发完一条逻辑消息后,显式地发一个end of stream标识,在接收方眼里,一条消息就是一个packet. 而在Stream-based Transport中,发送方不发送end of stream标识,而只是不停地发字节,接收方需要按照预定义的报文协议自己组合byte,解析出逻辑消息。
当进程A正在把钱从甲账户转到乙账户时,进程B也正在把钱从乙账户到甲账户;转账时需要锁住账户,如果A锁住甲等待乙时,B已锁住乙并等待甲,那么双方就会陷入死锁。 要避免这种死锁,有一个办法是: 按同样的顺序加锁。 注意,读书不要读得太快。 听说“按同样顺序加锁”就能避免死锁,就总是先锁出账者,再锁入账者。。。 结果,还是死锁。 “按同样的顺序加锁”不是指“两个进程使用同样的操作顺序(比如先锁出账者,再锁入账者)”,而是要“对给定的两个资源,所有进程总是先锁资源1,再锁资源2”。 比如,在数据库中,可以总是先锁ID更大的那条记录;在JAVA代码中,可以总是先锁hashcode更大的那条记录。
如果过了很久还没拿到锁,就放弃求锁。 这招总是可以避免陷入无限的僵局。
活锁(livelock): 没有真正的锁问题,而是进程不停地执行重复的操作,却总是失败。 《JAVA并发编程实践》给出了两个例子: 1. MQ消费者处理消息失败后将消息丢回到队列头部,然后立即马上收到这个消息,然后再处理失败入。。。 2. 两个礼貌的人在路上挡住彼此去路,然后同时往一边让,结果还是互相挡住;然后在同时往另一边让,结果也是互相挡住;然后再往一边让。。。 解决活锁的办法是在操作中引入退出机制,或者引入随机性。
IA32体系规定数据不能直接从存储器到存储器, 而必须先从存储器到寄存器,再从寄存器到目标存储器。 比如 int x = y 这样的赋值操作实际上就有两步指令。