Jetty websocket

使用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>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值