设为首页 收藏本站
查看: 909|回复: 0

[经验分享] WebSocket实践

[复制链接]

尚未签到

发表于 2017-3-2 08:07:12 | 显示全部楼层 |阅读模式
  基本弄清楚了WebSocket的来龙去脉后,开始了实现WebSocket技术的探索。
  看过一篇文章,测试了八种WebSocket框架性能,得以了解到实现WebSocket技术的框架有:

Netty、Undertow、Jetty、Vert.x、Grizzly、spray-websocket、node.js-websocket/Node.js、Golang

补充下:

作为老牌的servle容器,tomcat实际也可以实现WebSocket技术。
  下面说一下我遇到的一个标准:JSR356标准:

JSR 356,对于WebSocket的的Java API

这标志着所有兼容JAVA EE 7的应用程序都必须实现这个API。

java开发人员不需要关注websocket具体的实现,而只要关注逻辑就可以了。

具体带来的好处是,比如java EE容器,必须实现这个标准,使我们的编码可以统一规范(之前是如果你使用jetty,那么使用jetty的jar包实现websocket是一套API,如果你使用tomcat,那么使用tomcatjar包实现websocket是一套API,而现在统一的使用一套就可以了)。

但是jetty是在9.1版本之后才实现的(起初我的demo项目怎么也访问不到服务端的websocket,是jetty版本过低。),tomcat是在7之后实现的。
  下面是具体实现的代码

1.首先需要引用jar包

scope为provided,为了防止容器本身的websocket音响。


  • <dependency>
  •     <groupId>javax</groupId>
  •     <artifactId>javaee-api</artifactId>
  •     <version>7.0</version>
  •     <scope>provided</scope>
  • </dependency>

  2.服务端的代码:


  • package com.lanyoung.im.back.ly.websocket;

  • import javax.websocket.OnClose;
  • import javax.websocket.OnMessage;
  • import javax.websocket.OnOpen;
  • import javax.websocket.Session;
  • import javax.websocket.server.ServerEndpoint;
  • import java.io.IOException;

  • @ServerEndpoint("/websocket")
  • public class WebSocketTest {

  •     @OnMessage
  •     public void onMessage(String message, Session session)
  •         throws IOException, InterruptedException {

  •         // Print the client message for testing purposes
  •         System.out.println("Received: " + message);

  •         // Send the first message to the client
  •         session.getBasicRemote().sendText("This is the first server message");

  •         // Send 3 messages to the client every 5 seconds
  •         int sentMessages = 0;
  •         while(sentMessages < 3){
  •             Thread.sleep(5000);
  •             session.getBasicRemote().
  •                 sendText("This is an intermediate server message. Count: "
  •                     + sentMessages);
  •             sentMessages++;
  •         }

  •         // Send a final message to the client
  •         session.getBasicRemote().sendText("This is the last server message");
  •     }

  •     @OnOpen
  •     public void onOpen () {
  •         System.out.println("Client connected");
  •     }

  •     @OnClose
  •     public void onClose () {
  •         System.out.println("Connection closed");
  •     }
  • }

  3.客户端代码


  • <!DOCTYPE html>
  • <html>
  • <head>
  • <title>Testing websockets</title>
  • </head>
  • <body>
  •     <div>
  •         <input type="submit" value="Start" onclick="start()" />
  •     </div>
  •     <div id="messages"></div>
  •     <script type="text/javascript">
  •         var webSocket =
  •             new WebSocket('ws://localhost:8080/websocket');

  •         webSocket.onerror = function(event) {
  •             onError(event)
  •         };

  •         webSocket.onopen = function(event) {
  •             onOpen(event)
  •         };

  •         webSocket.onmessage = function(event) {
  •             onMessage(event)
  •         };

  •         function onMessage(event) {
  •             document.getElementById('messages').innerHTML
  •                 += '<br />' + event.data;
  •         }

  •         function onOpen(event) {
  •             document.getElementById('messages').innerHTML
  •                 = 'Connection established';
  •         }

  •         function onError(event) {
  •             alert(event.data);
  •         }

  •         function start() {
  •             webSocket.send('hello');
  •             return false;
  •         }
  •     </script>
  • </body>
  • </html>



来自为知笔记(Wiz)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-349002-1-1.html 上篇帖子: Hadoop 2.5.1编译 下篇帖子: tomcat 与 nginx,apache的区别?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表