java编写WebSocket服务端
来源:互联网 发布:java getsimplename 编辑:程序博客网 时间:2024/06/05 23:05
WbSocket官方协议内容: http://datatracker.ietf.org/doc/rfc6455/?include_text=1
连接请求内容:
GET / HTTP/1.1
Connection:Upgrade
Host:127.0.0.1:8088
Origin:
null
Sec-WebSocket-Extensions:x-webkit-deflate-frame
Sec-WebSocket-Key:puVOuWb7rel6z2AVZBKnfw==
Sec-WebSocket-Version:13
Upgrade:websocket
服务端接收请求后主要是成针对Sec-WebSocket-Key生成对就Sec-WebSocket-Accept 的key,生成Sec-WebSocket-Accept 值比较简单就是Sha1(Sec-WebSocket-Key+258EAFA5-E914-47DA-95CA-C5AB0DC85B11)即可
HTTP/1.1 101 Switching Protocols
Connection:Upgrade
Server:beetle websocket server
Upgrade:WebSocket
Date:Mon, 26 Nov 2012 23:42:44 GMT
Access-Control-Allow-Credentials:
true
Access-Control-Allow-Headers:content-type
Sec-WebSocket-Accept:FCKgUr8c7OsDsLFeJTWrJw6WO8Q=
在Tomcat8中集成了websocket-api.jar.他对WebSocket协议进行的封装:
package com.lgy.websocket;import java.io.IOException;import java.util.Set;import java.util.concurrent.CopyOnWriteArraySet;import java.util.concurrent.atomic.AtomicInteger;import javax.websocket.OnClose;import javax.websocket.OnError;import javax.websocket.OnMessage;import javax.websocket.OnOpen;import javax.websocket.Session;import javax.websocket.server.ServerEndpoint;@ServerEndpoint(value = "/websocket/chat")public class HelloWebSocketServlet {//private static final Log log = LogFactory.getLog(ChatAnnotation.class);private static final String GUEST_PREFIX = "Guest";private static final AtomicInteger connectionIds = new AtomicInteger(0);private static final Set<HelloWebSocketServlet> connections = new CopyOnWriteArraySet<>();private final String nickname;private Session session;public HelloWebSocketServlet() {nickname = GUEST_PREFIX + connectionIds.getAndIncrement();}//建立连接@OnOpenpublic void start(Session session) {this.session = session;connections.add(this);String message = String.format("* %s %s", nickname, "has joined.");System.out.println(message);}//接受消息@OnMessage public void incoming(String message) { System.out.println(message.toString()); //broadcast(filteredMessage); broadcast(message.toString()); }//客户端关闭了连接@OnClose public void end() { connections.remove(this); String message = String.format("* %s %s", nickname, "has disconnected."); System.out.println(message); //broadcast(message); }//WebSocket服务出错@OnError public void onError(Throwable t) throws Throwable { //log.error("Chat Error: " + t.toString(), t); } private static void broadcast(String msg) { for (HelloWebSocketServlet client : connections) { try { synchronized (client) { client.session.getBasicRemote().sendText(msg); } } catch (IOException e) { //log.debug("Chat Error: Failed to send message to client", e); connections.remove(client); try { client.session.close(); } catch (IOException e1) { // Ignore } String message = String.format("* %s %s", client.nickname, "has been disconnected."); broadcast(message); } } }}
0 0
- java编写WebSocket服务端
- java编写的Websocket服务端
- IdHTTPServer完成websocket服务端编写
- Java WebSocket服务端实现
- JAVA Sokcet(服务端)连接WebSocket个人总结
- websocket实现QQ聊天一之一(服务端编写)
- WebSocket握手服务端响应算法『java』
- 2、Java WebSocket实现服务端主动发消息给客户端
- Java Websocket实例【服务端与客户端实现全双工通讯】
- java-websocket 服务端 开发中遇到的问题
- java实现websocket服务端endPoint无法注入Service问题
- WebSocket 服务端实现
- websocket服务端请求标准
- websocket服务端PHP代码
- C# 实现WebSocket服务端
- [JAVA web服务端]用wsdl2java简化服务端的编写
- netty的websocket服务端开发
- Websocket服务端实现的方法
- Android中的activity
- JSON语法简析
- operating System not found
- Java数字的舍入
- iOS开发进阶
- java编写WebSocket服务端
- Linux内存cached释放
- UNIX Introduction
- JSON语法简析
- ant ----net/sf/antcontrib/antlib.xml
- iOS开发 - AFNetworking网络请求
- java 生成验证码
- java的初始化顺序
- 【C++】重载、覆盖、隐藏