websocket链接
来源:互联网 发布:淘宝客服个人总结 编辑:程序博客网 时间:2024/05/23 00:08
import java.io.IOException;import java.nio.ByteBuffer;import java.nio.CharBuffer;import net.sf.json.JSONObject;import org.apache.catalina.websocket.MessageInbound;import org.apache.catalina.websocket.WsOutbound;public class WebSocketMessageInbound extends MessageInbound {//当前连接的用户名称private final String user;public WebSocketMessageInbound(String user) {this.user = user;}public String getUser() {return this.user;}//建立连接的触发的事件@Overrideprotected void onOpen(WsOutbound outbound) {// 触发连接事件,在连接池中添加连接JSONObject result = new JSONObject();result.element("type", "user_join");result.element("user", this.user);//向所有在线用户推送当前用户上线的消息WebSocketMessageInboundPool.sendMessage(result.toString());result = new JSONObject();result.element("type", "get_online_user");result.element("list", WebSocketMessageInboundPool.getOnlineUser());//向连接池添加当前的连接对象WebSocketMessageInboundPool.addMessageInbound(this);//向当前连接发送当前在线用户的列表WebSocketMessageInboundPool.sendMessageToUser(this.user, result.toString());}@Overrideprotected void onClose(int status) {// 触发关闭事件,在连接池中移除连接WebSocketMessageInboundPool.removeMessageInbound(this);JSONObject result = new JSONObject();result.element("type", "user_leave");result.element("user", this.user);//向在线用户发送当前用户退出的消息WebSocketMessageInboundPool.sendMessage(result.toString());}@Overrideprotected void onBinaryMessage(ByteBuffer message) throws IOException {throw new UnsupportedOperationException("Binary message not supported.");}//客户端发送消息到服务器时触发事件@Overrideprotected void onTextMessage(CharBuffer message) throws IOException {//向所有在线用户发送消息WebSocketMessageInboundPool.sendMessage(message.toString());}}
import java.io.IOException;import java.nio.CharBuffer;import java.util.HashMap;import java.util.Map;import java.util.Set;public class WebSocketMessageInboundPool {//保存连接的MAP容器private static final Map<String,WebSocketMessageInbound > connections = new HashMap<String,WebSocketMessageInbound>();//向连接池中添加连接public static void addMessageInbound(WebSocketMessageInbound inbound){//添加连接System.out.println("user : " + inbound.getUser() + " join..");connections.put(inbound.getUser(), inbound);}//获取所有的在线用户public static Set<String> getOnlineUser(){return connections.keySet();}public static void removeMessageInbound(WebSocketMessageInbound inbound){//移除连接System.out.println("user : " + inbound.getUser() + " exit..");connections.remove(inbound.getUser());}public static void sendMessageToUser(String user,String message){try {//向特定的用户发送数据System.out.println("send message to user : " + user + " ,message content : " + message);WebSocketMessageInbound inbound = connections.get(user);if(inbound != null){inbound.getWsOutbound().writeTextMessage(CharBuffer.wrap(message));}} catch (IOException e) {e.printStackTrace();}}//向所有的用户发送消息public static void sendMessage(String message){try {Set<String> keySet = connections.keySet();for (String key : keySet) {WebSocketMessageInbound inbound = connections.get(key);if(inbound != null){System.out.println("send message to user : " + key + " ,message content : " + message);inbound.getWsOutbound().writeTextMessage(CharBuffer.wrap(message));}}} catch (IOException e) {e.printStackTrace();}}}
import javax.servlet.http.HttpServletRequest;import org.apache.catalina.websocket.StreamInbound;public class WebSocketMessageServlet extends org.apache.catalina.websocket.WebSocketServlet {private static final long serialVersionUID = 1L;public static int ONLINE_USER_COUNT= 1;public String getUser(HttpServletRequest request){return (String) request.getSession().getAttribute("user");}//跟平常Servlet不同的是,需要实现createWebSocketInbound,在这里初始化自定义的WebSocket连接对象 @Override protected StreamInbound createWebSocketInbound(String subProtocol,HttpServletRequest request) { return new WebSocketMessageInbound(this.getUser(request)); }}
0 0
- websocket链接
- Cocos2dx 链接WebSocket服务器
- WebSocket连接wss链接
- websocket 链接服务器报 302 错误解决方法
- Websocket链接winsock2编写的服务…
- WebSocket
- WebSocket
- WebSocket
- websocket
- WebSocket
- WebSocket
- WebSocket
- WebSocket
- websocket
- websocket
- WebSocket
- WebSocket
- WebSocket
- Android 屏幕适配
- MongoDB日志文件过大的解决方法
- Watir-webdriver使用手册
- 图片加水印上传(PHP)
- busybox制作ramdisk动态库版本
- websocket链接
- ButterKnife--View注入框架
- [Strings]一些字符串题目
- 限制UITextView输入字数(兼容iOS7)
- nginx学习资源
- 判断用户登录出错信息
- 使用navicat premium连接oracle数据库的步骤
- linux autotools libtool 生成库版本号设置方法
- 关于http请求body