【网络编程】——WebSocket打开和关闭通道,消息发送
2017-05-25 15:47
573 查看
HTML5给Web浏览器带来了全双工TCP连接WebSocket标准服务器的能力。浏览器和能够与服务器建立连接,通过已建立的通信信道来发送和接收数据而不需要由HTTP协议入额外的开销。
tomcat7或者更高版本
两者版本保持一致(32位or64位)
实现WebSocket技术需要的jar包
在tomcat7.0中都包含,websocket-api.jar以及tomcat7-websocket.jar。tomcat7-websocket.jar是对websocket-api.jar的实现,两者缺一不可。
ServerApplicationConfig中包含两个方法,其实这两个方法的核心都是过滤,筛选配置websocket的类。
getEndPointConfigs——通过实现类的方式获取所有配置websocket类
getAnnotatedEndpointClasses——通过注解的方式获取配置websocket类,扫描src下所有类@serverEndpoint注解的类
PS:Endpoint就是指一个websocket的一个服务端程序。
本文也将采用注解的方式进行配置。
进入程序界面,点击【open】,启动调试模式,观察链接调用
采用websocket的,URL是ws或者是wss开头,wss代表加密之后的。
在客户端文本框中输入消息后发送,注意前台的输出和后台的打印情况,其实在通道打开的过程中,实现了消息的通信。
1、环境配置
jdk7或者是更高版本tomcat7或者更高版本
两者版本保持一致(32位or64位)
实现WebSocket技术需要的jar包
在tomcat7.0中都包含,websocket-api.jar以及tomcat7-websocket.jar。tomcat7-websocket.jar是对websocket-api.jar的实现,两者缺一不可。
2、Websocket-api介绍
ServerApplicationConfig是websocket的程序入口,在tomcat启动时会自动启动,是websocket的核心配置类。ServerApplicationConfig中包含两个方法,其实这两个方法的核心都是过滤,筛选配置websocket的类。
getEndPointConfigs——通过实现类的方式获取所有配置websocket类
getAnnotatedEndpointClasses——通过注解的方式获取配置websocket类,扫描src下所有类@serverEndpoint注解的类
PS:Endpoint就是指一个websocket的一个服务端程序。
本文也将采用注解的方式进行配置。
import java.util.Set; import javax.websocket.Endpoint; import javax.websocket.server.ServerApplicationConfig; import javax.websocket.server.ServerEndpointConfig; /** * @ClassName: DemoConfig * @Description: 获取配置websocket的类 * @author 贾文静 * @date 2017-5-22 下午9:24:02 * */ public class DemoConfig implements ServerApplicationConfig { // 注解方式的启动 public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> scan) { //检测系统中的websocket类 System.out.println("config......" + scan.size()); // 返回 在服务端注册websocket类,过滤的作用 return scan; } //实现类的方式 public Set<ServerEndpointConfig> getEndpointConfigs( Set<Class<? extends Endpoint>> arg0) { return null; } }
3、建立通信信道
建立通信信道是WebSocket技术实现的关键!服务端
服务端创建一个websocket的连接请求,为了方便把服务端处理请求的几个方法一并书写import java.io.IOException; import javax.websocket.OnClose; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; //websocket的连接请求的地址 @ServerEndpoint("/echo") //这一部分和客户端是对应的,特别重要!!! public class EchoSocket { public EchoSocket() { System.out.println("EchoSocket.EchoSocket()"); } //对onpen给予反应应答,注入一个session对象 @OnOpen public void open(Session session) { // 一个session唯一代表一个通信会话 //通过sessionid区分连接 System.out.println("sessionid:" + session.getId()); } //关闭管道 @OnClose public void close(Session session) { System.out.println("session:" + session.getId() + "关闭了。。。。。。"); } //发送消息 @OnMessage public void message(Session session, String msg) { System.out.println("客户端:" + msg);
// 服务端对客户的消息给予应答 try { session.getBasicRemote().sendText("服务器端:in hao too"); } catch (IOException e) { e.printStackTrace(); } } }
客户端
利用JavaScript进行处理,在这一部分同样有一个websocket连接地址的配置,存储到target对象中。<script type="text/javascript"> var ws;//一个ws对象就是一个通信管道 //target就是要连接服务端的地址 刚好和服务端的websocket进行匹配和服务器端中表重要部分对应 var target = "ws://localhost:8888/websocket_01/echo"; function subOpen(){ //类似于ajax中兼容浏览器的处理 if("WebSocket"in window){ ws = new WebSocket(target); }else if("MozWebSocket" in window){ ws = new MozWebSocket(target); }else{ alert("WebSocket is not supported by this browser."); return; } //获取客户端的消息,传递到服务端 ws.onmessage=function(event){ var dv = document.getElementById("dv"); dv.innerHTML+=event.data; }; } //发送消息的事件 function subSend(){ var msg = document.getElementById("msg").value; ws.send(msg); document.getElementById("msg").value = ""; } </script> <body> <br> <button onclick="subOpen();">open</button> <input id="msg"/><button onclick="subSend();">send</button> <span id="dv"></span> </body>当程序启动后,观察后台的打印情况,程序中检测到一个websocket类。
进入程序界面,点击【open】,启动调试模式,观察链接调用
采用websocket的,URL是ws或者是wss开头,wss代表加密之后的。
在客户端文本框中输入消息后发送,注意前台的输出和后台的打印情况,其实在通道打开的过程中,实现了消息的通信。
【总结】
消息通道的打开和信息传递只是其中很基础的一部分内容,做好基础后,将后开启后续的操作,实现聊天以及群聊之类。同时也渐渐发现随着技术的深入,感觉这个科技中的神秘感越来越少。。。。。。相关文章推荐
- 【网络编程】——WebSocket打开和关闭通道,消息发送
- 高性能网络编程2----TCP消息的发送
- C#网络编程,多个客户端连接服务器端并发送消息
- C#网络编程消息发送问题浅析
- Python 网络编程起步(Socket发送消息)
- 高性能网络编程2----TCP消息的发送
- 高性能网络编程2----TCP消息的发送
- Android串口通讯,在线程里一直监听是否有消息发来,接收到消息到runOnUiThread处理跳转页面,页面跳转关闭之后,在发送消息尽然还会执行在打开页面?
- MFC枚举所有窗体,并向打开的窗体发送关闭消息
- 高性能网络编程2----TCP消息的发送
- 高性能网络编程2----TCP消息的发送
- 高性能网络编程(二)----TCP消息的发送
- Python天天美味(27) - 网络编程起步(Socket发送消息)
- [Android] 监听系统网络连接打开或者关闭的消息
- 高性能网络编程2----TCP消息的发送
- MFC枚举所有窗体,并向打开的窗体发送关闭消息
- 高性能网络编程2----TCP消息的发送
- 高性能网络编程2----TCP消息的发送
- 高性能网络编程2--TCP消息的发送
- linux 系统之间,网络编程,消息发送与接收