当前位置: 代码迷 >> 综合 >> Jetty websocket
  详细解决方案

Jetty websocket

热度:66   发布时间:2023-12-13 19:56:40.0

使用jetty版本:jetty-websocket-8.0.4.v20111024.jar

使用servletapi版本:3.0

服务器端servlet继承 WebSocketServlet 实现websocket连接。如下代码:

public class Communicate extends WebSocketServlet {private static final long serialVersionUID = 5933410218860858657L;private static List<WSocket> clients = new ArrayList<WSocket>();

@Overridepublic WebSocket doWebSocketConnect(HttpServletRequest arg0, String arg1) {WSocket wsClinet = new WSocket();clients.add(wsClinet);

return wsClinet;}

public static List<WSocket> getClients() {return clients;}

public static void setClients(List<WSocket> clients) {Communicate.clients = clients;}}

使用自定义的文本消息的websocket:

public class WSocket implements OnTextMessage {private Connection connection;

@Overridepublic void onClose(int arg0, String arg1) {System.out.println("*** close :" + arg1);}

@Overridepublic void onOpen(Connection arg0) {System.out.println("*** open :" + arg0.getProtocol());connection = arg0;}

@Overridepublic void onMessage(String arg0) {List<WSocket> clients = Communicate.getClients();if (null == clients) {return;}

for (WSocket ws : clients) {try {Connection ct = ws.getConnection();if(null != ct && ct.isOpen()) {ct.sendMessage(arg0);}} catch (IOException e) {System.out.println("*** send message exception.");e.printStackTrace();}}}

public Connection getConnection() {return connection;}}

实现逻辑:当接收到消息的时候,给各个客户端轮发。

web.xml配一个servlet:

<servlet>

       <servlet-name>communicate</servlet-name>  <servlet-class>com.websocket.service.Communicate</servlet-class>  </servlet>  <servlet-mapping>  <servlet-name>communicate</servlet-name>  <url-pattern>communicate.htm</url-pattern>  </servlet-mapping>

页面代码:

<script>

if(!window.WebSocket) {alert("not support websocket.");}

var socket = new WebSocket("ws://localhost:8080/WebSocketDemo/communicate.htm");socket.onmessage = function(evt) {alert(evt.data);}

socket.onclose = function() {alert("close.");}

socket.onopen = function() {alert("open connection.");}

function sendMsg() {socket.send('data');}</script>


  相关解决方案