- 浏览: 1447832 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
前篇:
http://haoningabc.iteye.com/blog/2011985
代码的git地址
https://github.com/killinux/mysocket/tree/master/websocket/project/tomcat7servlet
如果是使用tomcat7的模式
1.html是客户端
2.tomcat7的servlet对websocket协议进行了封装,里面转发给普通的socket服务端
3.普通的socket 作为服务端
html ----->tomcat7,servlet----->socket server
这里纯js的客户端:
如果是用java-websocket,
git为 https://github.com/killinux/Java-WebSocket
代码如下:
socket server端:
----------------------------------------------------------------------
----------------------------------------------------------------------
如果server是用tomcat转发
参考
http://blog.csdn.net/a79412906/article/details/9393515
servlet:
web.xml配置:
tomcat7的
配置
中心server代码:
客户端改进如下:
servlet中发现,不能广播,只能单纯的返回,如果想每个浏览器都受到消息,则修改如下
这段参考
http://blog.fens.me/java-websocket-intro/
http://haoningabc.iteye.com/blog/2011985
代码的git地址
https://github.com/killinux/mysocket/tree/master/websocket/project/tomcat7servlet
如果是使用tomcat7的模式
1.html是客户端
2.tomcat7的servlet对websocket协议进行了封装,里面转发给普通的socket服务端
3.普通的socket 作为服务端
html ----->tomcat7,servlet----->socket server
这里纯js的客户端:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <script type="text/javascript"> var ws = null; function startServer() { var url = "ws://192.168.0.102:5000"; if ('WebSocket' in window) { ws = new WebSocket(url); } else if ('MozWebSocket' in window) { ws = new MozWebSocket(url); } else { alert('浏览器不支持'); return; } ws.onopen = function() { alert('Opened!'); }; // 收到服务器发送的文本消息, event.data表示文本内容 ws.onmessage = function(event) { alert('Receive message: ' + event.data); }; ws.onclose = function() { alert('Closed!'); } } //发送信息 function sendMessage(){ var textMessage=document.getElementById("textMessage").value; if(ws!=null&&textMessage!=""){ ws.send(textMessage); } } </script> <body onload="startServer()"> <input type="text" id="textMessage" size="20" /> <input type="button" onclick="sendMessage()" value="Send"> </body> </html>
如果是用java-websocket,
git为 https://github.com/killinux/Java-WebSocket
代码如下:
socket server端:
import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static final int PORT = 5000; public static void main(String[] args) { System.out.println("服务器...\n"); Server ser = new Server(); ser.sock(); } public void sock() { try { ServerSocket server = new ServerSocket(PORT); while (true) { // 一旦有堵塞, 则表示服务器与客户端获得了连接 Socket client = server.accept(); // 处理这次连接 new PServer(client); } } catch (Exception e) { System.out.println("服务器异常: " + e.getMessage()); } } private class PServer implements Runnable { private Socket socket; public PServer(Socket sock) { socket = sock; new Thread(this).start(); } public void run() { System.out.println("一个客户端连接ip:" + socket.getInetAddress()); try { // 读取客户端数据 DataInputStream input = new DataInputStream( socket.getInputStream()); // 向客户端发送数据 DataOutputStream out = new DataOutputStream( socket.getOutputStream()); // 读取客户端数据 //System.out.println("客户端发过来的内容: " + input.readUTF()); byte[] bt = new byte[1024]; int leng = input.read(bt); System.out.println(new String(bt, 0, leng)); // 发送键盘输入的一行 // String s = new BufferedReader(new // InputStreamReader(System.in)).readLine(); String s = "server d shu ru"; out.write(s.getBytes()); out.flush(); input.close(); out.close(); socket.close(); } catch (Exception e) { System.out.println("服务器 run 异常: " + e.getMessage()); } } } }
----------------------------------------------------------------------
----------------------------------------------------------------------
如果server是用tomcat转发
参考
http://blog.csdn.net/a79412906/article/details/9393515
servlet:
package com.hao; import java.io.DataInputStream; import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.nio.CharBuffer; import javax.servlet.http.HttpServletRequest; import org.apache.catalina.websocket.MessageInbound; import org.apache.catalina.websocket.StreamInbound; import org.apache.catalina.websocket.WebSocketServlet; public class HelloWorldWebSocketServlet extends WebSocketServlet { protected StreamInbound createWebSocketInbound(String subProtocol,HttpServletRequest arg1) { return new MessageInbound() { @Override protected void onBinaryMessage(ByteBuffer arg0) throws IOException { // TODO Auto-generated method stub } @Override protected void onTextMessage(CharBuffer message) throws IOException { // TODO Auto-generated method stub System.out.println("onText--->" + message.toString()); Socket socket; String msg = ""; try { // 向服务器利用Socket发送信息 socket = new Socket("192.168.1.102", 5000); //socket = new Socket("127.0.0.1",5000); PrintWriter output = new PrintWriter( socket.getOutputStream()); output.write(message.toString()); output.flush(); // 这里是接收到Server的信息 DataInputStream input = new DataInputStream( socket.getInputStream()); byte[] b = new byte[1024]; input.read(b); // Server返回的信息 msg = new String(b).trim(); output.close(); input.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 往浏览器发送信息 CharBuffer cb = CharBuffer.wrap(new StringBuilder(msg)); getWsOutbound().writeTextMessage(cb); } }; } public static void main(String[] args) { Socket socket; String message ="haoning"; String msg = ""; try { // 向服务器利用Socket发送信息 socket = new Socket("192.168.0.102", 5000); // socket = new Socket("127.0.0.1",5000); PrintWriter output = new PrintWriter( socket.getOutputStream()); output.write(message.toString()); output.flush(); // 这里是接收到Server的信息 DataInputStream input = new DataInputStream( socket.getInputStream()); byte[] b = new byte[1024]; input.read(b); // Server返回的信息 msg = new String(b).trim(); output.close(); input.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
web.xml配置:
<servlet> <servlet-name>wsSnake</servlet-name> <servlet-class>com.hao.HelloWorldWebSocketServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>wsSnake</servlet-name> <url-pattern>/websocket/test</url-pattern> </servlet-mapping>
tomcat7的
配置
<?xml version='1.0' encoding='utf-8'?> <Context crossContext="true" docBase="D:/workspace/work1/Test/webapp" path="/webs" reloadable="true"> </Context>
中心server代码:
import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static final int PORT = 5000; public static void main(String[] args) { System.out.println("服务器...\n"); Server ser = new Server(); ser.sock(); } public void sock() { try { ServerSocket server = new ServerSocket(PORT); while (true) { // 一旦有堵塞, 则表示服务器与客户端获得了连接 Socket client = server.accept(); System.out.println("server accept"); // 处理这次连接 new PServer(client); } } catch (Exception e) { System.out.println("服务器异常: " + e.getMessage()); } } private class PServer implements Runnable { private Socket socket; public PServer(Socket sock) { socket = sock; new Thread(this).start(); } public void run() { System.out.println("一个客户端连接ip:" + socket.getInetAddress()); try { // 读取客户端数据 DataInputStream input = new DataInputStream( socket.getInputStream()); // 向客户端发送数据 DataOutputStream out = new DataOutputStream( socket.getOutputStream()); // 读取客户端数据 //System.out.println("客户端发过来的内容: " + input.readUTF()); byte[] bt = new byte[1024]; int leng = input.read(bt); System.out.println(new String(bt, 0, leng)); // 发送键盘输入的一行 // String s = new BufferedReader(new // InputStreamReader(System.in)).readLine(); String s = "server d shu ru"; out.write(s.getBytes()); out.flush(); input.close(); out.close(); socket.close(); } catch (Exception e) { System.out.println("服务器 run 异常: " + e.getMessage()); } } } }
客户端改进如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <script type="text/javascript"> var ws = null; function log(text) { document.getElementById("log").innerHTML = (new Date).getTime() + ": " + text +"<br>"+ document.getElementById("log").innerHTML; } function startServer() { var url = document.getElementById("serverip").value;// "ws://192.168.0.102:8887"; if ('WebSocket' in window) { ws = new WebSocket(url); } else if ('MozWebSocket' in window) { ws = new MozWebSocket(url); } else { alert('浏览器不支持'); return; } ws.onopen = function() { alert('Opened!'); }; // 收到服务器发送的文本消息, event.data表示文本内容 ws.onmessage = function(event) { //alert('Receive message: ' + event.data); log('Receive message: ' + event.data); }; ws.onclose = function() { alert('Closed!'); } document.getElementById("conbtn").disabled="true"; document.getElementById("stopbtn").removeAttribute('disabled'); } //发送信息 function sendMessage(){ var textMessage=document.getElementById("textMessage").value; if(ws!=null&&textMessage!=""){ ws.send(textMessage); } } function stopconn(){ ws.close(); document.getElementById("conbtn").removeAttribute('disabled'); document.getElementById("stopbtn").disabled="true"; } </script> <body onload=""> <input id="serverip" type="text" size="20" value="ws://192.168.0.102:8887"/> <input id="conbtn" type="button" onclick="startServer()" value="open" /> <input id="stopbtn" type="button" onclick="stopconn()" value="stop" disabled="disabled"/> </br> <input id="textMessage" type="text" size="20" /> <input type="button" onclick="sendMessage()" value="Send"> <div id="log"></div> </body> </html>
servlet中发现,不能广播,只能单纯的返回,如果想每个浏览器都受到消息,则修改如下
package com.hao; import java.io.DataInputStream; import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.util.ArrayList; import javax.servlet.http.HttpServletRequest; import org.apache.catalina.websocket.MessageInbound; import org.apache.catalina.websocket.StreamInbound; import org.apache.catalina.websocket.WebSocketServlet; import org.apache.catalina.websocket.WsOutbound; public class HelloWorldWebSocketServlet extends WebSocketServlet { private static ArrayList mmiList = new ArrayList(); protected StreamInbound createWebSocketInbound(String subProtocol, HttpServletRequest arg1) { return new MyMessageInbound(); } private class MyMessageInbound extends MessageInbound { WsOutbound myoutbound; @Override public void onOpen(WsOutbound outbound) { try { System.out.println("Open Client."); this.myoutbound = outbound; mmiList .add(this); outbound.writeTextMessage(CharBuffer.wrap("Hello!")); } catch (IOException e) { e.printStackTrace(); } } @Override public void onClose(int status) { System.out.println("Close Client."); mmiList .remove(this); } @Override protected void onBinaryMessage(ByteBuffer arg0) throws IOException { // TODO Auto-generated method stub } @Override protected void onTextMessage(CharBuffer message) throws IOException { // TODO Auto-generated method stub System.out.println("onText--->" + message.toString()); for (int i=0;i< mmiList.size();i++ ) { MyMessageInbound mmib = (MyMessageInbound) mmiList.get(i); CharBuffer buffer = CharBuffer.wrap(message); mmib.myoutbound.writeTextMessage(buffer); mmib.myoutbound.flush(); } /*Socket socket; String msg = ""; try { // 向服务器利用Socket发送信息 socket = new Socket("192.168.0.102", 5000); // socket = new Socket("127.0.0.1",5000); PrintWriter output = new PrintWriter(socket.getOutputStream()); output.write(message.toString()); output.flush(); // 这里是接收到Server的信息 DataInputStream input = new DataInputStream( socket.getInputStream()); byte[] b = new byte[1024]; input.read(b); // Server返回的信息 msg = new String(b).trim(); output.close(); input.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 往浏览器发送信息 CharBuffer cb = CharBuffer.wrap(new StringBuilder(msg)); getWsOutbound().writeTextMessage(cb);*/ } } public static void main(String[] args) { Socket socket; String message = "haoning"; String msg = ""; try { // 向服务器利用Socket发送信息 socket = new Socket("192.168.0.102", 5000); // socket = new Socket("127.0.0.1",5000); PrintWriter output = new PrintWriter(socket.getOutputStream()); output.write(message.toString()); output.flush(); // 这里是接收到Server的信息 DataInputStream input = new DataInputStream(socket.getInputStream()); byte[] b = new byte[1024]; input.read(b); // Server返回的信息 msg = new String(b).trim(); output.close(); input.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
这段参考
http://blog.fens.me/java-websocket-intro/
发表评论
-
websocket直播
2020-05-22 17:59 4361.websocket转发的最简单server 2.h5接收w ... -
openresty聊天室的helloworld
2018-04-22 19:25 728openresty的websocket + redis的sub ... -
openresty websocket
2018-04-18 17:08 1420mac安装openresty brew install o ... -
nginx代理wss和https
2018-02-27 15:34 3864nginx启用ssl yum install openssl ... -
websocket和tap使用select关联
2016-06-14 22:01 720c语言的socket基础http://haoningabc.i ... -
websocket传传图片
2015-12-25 17:51 7212参考[url]http://www.adobe.com/dev ... -
websocket相关调研 总结帖
2014-12-21 21:53 3946最近把websocket的客户端和服务端使用过的调通的例子总结 ... -
autobahn的helloworld
2014-11-08 18:36 2723python2.7.8可用,python2.6一样的代码就有问 ... -
ios websocket server端
2014-10-22 00:07 2153https://github.com/benlodotcom/ ... -
ios客户端websocket的helloworld
2014-10-09 02:11 23151ios8,xcode6 https://github.com/ ... -
websocket的helloworld
2014-02-06 23:47 14042ChatClient.java ChatServer.java ...
相关推荐
websocket+tomcat+jetty+netty
支持websocket的tomcat
Java后端WebSocket的Tomcat实现的简要说明,可以参考一下
本文档主要讲述的是Java后端WebSocket的Tomcat实现;随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了。近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,...
Tomcat利用webSocket建立常连接 jar包
文档部分摘录:下载myeclipse10以上版本(支持tomcat7.x的),最好是myeclipse 2014同时支持javaee7(从javaee7起支持websocket)的。这里测试用的是myeclipse10(没有javaee7).如果是myclipse10需要下载javaee7的包。 ...
html5+tomcat7+jdk1.7搭建的 websocket聊天室。
Web项目的前后端WebSocket的Java和Tomcat7的使用示例,可以参考本样例来实现WebSocket技术的Web前后台的技术。
支持websocket的tomcat 64 bit
java tomcat 7.0.42 websocket可使用java tomcat 7.0.42 websocket可使用java tomcat 7.0.42 websocket可使用java tomcat 7.0.42 websocket可使用
phonegap+websocket+tomcat实现移动终端推送功能 ,android版
jsp WebSocket+Tomcat实现真●Web版即时聊天室(单人+多人),传统的web配置方式,方便移植到自己的系统里,功能包括单人聊天(点对点的推送),多人广播,大家有兴趣还可以自己扩展 这里是tomcat8基于注解的方式实现,...
Java后端WebSocket的Tomcat实现__动力节点共6页.pdf.zip
HTML5 WebSocket+Tomcat实现真●Web版即时聊天室(单人+多人).zip HTML5 WebSocket+Tomcat实现真●Web版即时聊天室(单人+多人).zip HTML5 WebSocket+Tomcat实现真●Web版即时聊天室(单人+多人).zip ...
tomcat7-websocket.jar
此次主要了解,整合的是spring websocket。在最开始的时候,碰到挺多问题的,不是连接错误就是一直连接不成功。整的我的小心脏都受不了,蛋疼。百度,谷歌一大堆demo,整到工程里能跑起来,但是就是连接不成功,放弃...
tomcat-embed-websocket7 jar包
tomcat8真正支持jsr-356(包含对websocket的支持), tomcat7部分版本的websocket实现不兼容jsr-356。 需要注意websocket与浏览器的兼容问题,有些早期版本的浏览器支持旧版本的websocket协议,可能会与新版本的...
tomcat-embed-websocket-8.0.35.jar,经过测试,可以使用。