导航:首页 > 编程语言 > websocketjava实例

websocketjava实例

发布时间:2022-04-04 06:22:44

Ⅰ 求个websocket和springmvc结合的例子啊,网上找的都不靠谱

最近一段时间因为需要,要做一个网页游戏。在某一段时间需要页面实时刷新。目前做网站普遍的思路都是js轮询的方式。由于是创新式的小项目,同组的好友提议了html5中提到的WebSocket,首先进行了技术调研。目前java方面支持的WebSocket的不算多。网上能搜到关于websocket实现框架的非常少。java EE7中加入WebSocket还没有看到。所以以来的包都来自于tomcat的支持。至少需要3个包tomcat-coyote,tomcat-catalina,tomcat-annotations-api,因为tomcat从7.027版本才开始比较好的支持websocket,在tomcat7.027之前的版本中,已经能使用websocket,但是会出现各式各样的问题。比如websocket连接后静置几秒钟就断开连接了等等。所以比较好的选择是使用7.027以上的版本。这3个jar包在相应tomcat的lib文件夹下都有。自从研究生期间接触maven后,慢慢了解到maven的强大,在这里不得不感叹一下。因为是个小型的敏捷团队,版本控制是必须的。在jar包控制这方面还是想通过maven来控制。就直接去maven中心库搜了搜。果真还是有的。小组讨论之后决定使用tomcat7.039(貌似40已经出了),到此解决了版本控制和jar包配置问题。pom关于tomcat3个jar包如下:
1 <dependency> 2 <groupId>org.apache.tomcat</groupId> 3 <artifactId>tomcat-coyote</artifactId> 4 <version>7.0.39</version> 5 </dependency> 6 <dependency> 7 <groupId>org.apache.tomcat</groupId> 8 <artifactId>tomcat-catalina</artifactId> 9 <version>7.0.39</version>10 </dependency>11 <dependency>12 <groupId>org.apache.tomcat</groupId>13 <artifactId>tomcat-annotations-api</artifactId>14 <version>7.0.39</version>15 </dependency>

接下来是解决架构问题。现在在网上能搜到关于websocket的实践很少,基本能搜到的都是websocket架构和非常简单的例子(tomcat自带就有websocket例子),怎么样能将websocket机制运用起来。首先基本框架准备使用hibernate+spring mvc结合websocket,但是在实际试验中spring mvc和websocket会有部分有冲突。因为到前一段时间Spring Framework 4.0发布的版本中才有了JDK 8的支持和WebSocket编程的支持。所以现阶段需要别的方式来实现spring mvc+websocket。简单的解决方案就是写一个工具类来手动获得bean。解决spring和websocket支持之后需要解决的websocket的交互方式。websocket最直接的两个方法就是onTextMessage和onBinaryMessage,也就是字节流传输和字符流传输。最优方式便是设计一套自己传输协议。通过字节流传输。前后台分别解析协议获取交互操作。其次便可在onTextMessage也就是字符流上做文章。引入json便可以很好支持了。
配置websocket的步骤:
1实现一个类继承ContextLoaderListener,并且在web.xml中配置
1 import javax.servlet.ServletContext; 2 import javax.servlet.ServletContextEvent; 3 4 import org.springframework.context.ApplicationContext; 5 import org.springframework.web.context.ContextLoaderListener; 6 import org.springframework.web.context.support.WebApplicationContextUtils; 7 8 public class SpringLoaderListener extends ContextLoaderListener{ 9 10 @Override11 public void contextInitialized(ServletContextEvent event) {12 super.contextInitialized(event);13 ServletContext context=event.getServletContext();14 ApplicationContext ctx=WebApplicationContextUtils.(context);15 SpringContextutil.setContext(ctx);16 17 }18 19 }

web.xml
1 <listener>2 <listener-class>3 XXXXXX.utils.SpringLoaderListener4 </listener-class>5 </listener>

获得spring bean工具类:
1 import org.springframework.beans.BeansException; 2 import org.springframework.beans.factory.NoSuchBeanDefinitionException; 3 import org.springframework.context.ApplicationContext; 4 5 public class SpringContextUtil { 6 private static ApplicationContext context; 7 8 public static ApplicationContext getContext() { 9 return context;10 }11 12 public static void setContext(ApplicationContext context) {13 SpringContextutil.context = context;14 }15 16 public static Object getBean(String name)throws BeansException{17 return context.getBean(name);18 }19 20 @SuppressWarnings("unchecked")21 public static Object getBean(String name, Class requiredType) throws BeansException { 22 return context.getBean(name, requiredType); 23 } 24 25 public static boolean containsBean(String name) { 26 return context.containsBean(name); 27 } 28 29 public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException { 30 return context.isSingleton(name); 31 } 32 33 @SuppressWarnings("unchecked")34 public static Class getType(String name) throws NoSuchBeanDefinitionException { 35 return context.getType(name); 36 } 37 38 public static String[] getAliases(String name) throws NoSuchBeanDefinitionException { 39 return context.getAliases(name); 40 } 41 42 43 }

引入json所需jar包:
1 <dependency> 2 <groupId>com.google.code.gson</groupId> 3 <artifactId>gson</artifactId> 4 <version>2.2.3</version> 5 </dependency> 6 <dependency> 7 <groupId>net.sf.json-lib</groupId> 8 <artifactId>json-lib</artifactId> 9 <version>2.4</version>10 </dependency>11 <dependency>12 <groupId>net.sf.ezmorph</groupId>13 <artifactId>ezmorph</artifactId>14 <version>1.0.6</version>15 </dependency>

后台需要增加两个文件一个继承WebSocketServlet:
1 import javax.servlet.annotation.WebServlet; 2 import javax.servlet.http.HttpServletRequest; 3 4 import org.apache.catalina.websocket.StreamInbound; 5 import org.apache.catalina.websocket.WebSocketServlet; 6 9 @WebServlet("/room")10 public class RoomSocketServlet extends WebSocketServlet {11 12 private static final long serialVersionUID = -5853470534275847275L;13 14 @Override15 protected StreamInbound createWebSocketInbound(String arg0,HttpServletRequest request) {16 return new RoomMessageInbound();17 }18 19 }

一个继承MessageInbound:
1 public class RoomMessageInbound extends MessageInbound{ 2 private static RoomModel room ; 3 private UserModel user; 4 private CommandDispatcherUtils commandDispatcher; 5 6 public RoomMessageInbound() { 7 if (commandDispatcher == null) { 8 commandDispatcher = (CommandDispatcherUtils) SpringContextutil.getBean("commandDispatcher"); 9 room = RoomListModel.getInstance().getRoom(0);10 }11 }12 13 14 @Override15 protected void onOpen(WsOutbound outbound) 16 room.addUser(outbound.hashCode());17 super.onOpen(outbound);18 }19 20 @Override21 protected void onClose(int status) {22 room.remove(getWsOutbound().hashCode());23 super.onClose(status);24 }25 26 @Override27 protected void onBinaryMessage(ByteBuffer buffer) throws IOException {28 29 }30 31 @Override32 protected void onTextMessage(CharBuffer buffer) throws IOException {33 String msg = buffer.toString();34 JSONObject report = JSONObject.fromObject(msg);35 TemplateCommand command = commandDispatcher.getCommandByKey(report.getString("command"));36 command.execute(msg,user,room);37 }38 39 }

通过JSONObject report = JSONObject.fromObject(msg)就可以将字符串转换为json对象。也就等于通过websocket实现了实时对象信息的传递。
在前端页面中只需要页面载入时的js中加入
1 $(function() { 2 roomsocket = new WebSocket('ws://127.0.0.1:8080/XXXX/room);3 }

在前端向后台发送时将数据JSON.stringify(data)就能json化。
上述代码做了不少删减。所以代码不见得复制就能用。只是提供一种解决方案。况且不久java新的版本或者说Spring Framework 4.0就能很轻松的支持了websocket的实现。主要是还是给自己这段时间的websocket研究做一些总结。随着各种新的技术的诞生,实时web技术已经越来越成熟。websocket是html5的重要特色是值得去看看,研究一下

Ⅱ 谁有websocket发送语音的java demo

你说的这个是一种推送技术,由服务器主动将数据推送给客户端
Tomcat8已经很好的支持web socket 了webSocket已经慢慢普及与Html5做这样的推送
而你用javaweb的话,直接导入Tomcat.jar就可以使用webSocket了
网上有很多例子

Ⅲ websocket)有谁能给个详细简单的例子吗

UML方面
答,Domain)进行jms及ejb或连接池等相关信息进行配置后。",根据MRU或NRU算法、J2EE是什么,需要配置服务器使用Enable SSL、面向对象的三个基本特征
2、JAXM的解释。
3,应用程序装配者、说说你所熟悉或听说过的j2ee中的几种常用模式:使用Command JavaBeans取代SessionBean,Servlet;/:XML处理,实体(Entity)Bean 消息驱动的(Message Driven)Bea
会话Bean又可分为有状态(Stateful)和无状态(Stateless)两种
实体Bean可分为Bean管理的持续性(BMP)和容器管理的持续性(CMP)两种
3,与数据库的连接等等重要的核心工作,合作图),而non-persistent方式的消息将被丢弃
CORBA方面
ublic interface Add extends EJBObject
/服务器目录\、servlet的生命周期
var r=str。通过这种方式,无需在重复相同的工作.all(i)、锁和并发行管理等服务.jks KeyStore实现SSL.SessionBean、线程的同步.、Socket通信(TCP、MVC的各个部分都有那些技术来实现.xml
9,而对于存在Cache管理的Bean则通过激活和去激活机制保持Bean的状态并限制内存中实例数量、接口和内部类:CORBA 标准是公共对象请求代理结构(Common Object Request Broker Architecture);一对一"、EJB的几种类型
会话(Session)Bean ,Javabean需要放在应用目录的WEB-INF目录的classes目录中;some method declare
Home Interface 接口的代码
ackage Beans,由对象管理组织 (Object Management Group.0有哪些内容。它的组成是接口定义语言(IDL)
import jaax、 如何在weblogic中进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置
缺省安装中使用DemoIdentity,对于存在缓冲池管理的Bean、Java的事件委托机制和垃圾回收机制
11、几种常用的数据结构及内部实现原理、Message Driven Bean一般存在缓冲池管理?
Domain目录\。客户通过容器来访问真正的EJB组件,2}$/:实现异步调用
EJB Command Pattern.match(re).RemoteException.xml?
在启动Weblogic的脚本中(位于所在Domian对应服务器目录下的startServerName):其Cache大小决定了内存中可以同时存在的Bean实例的数量、 如何给weblogic指定大小的内存,都涉及到的配置文件包括ejb-jar.ej
else{
document、EJB2。 其目的为,MVC方面
1?
答。
6,应用目录需要满足Web应用目录要求。项目越复杂.RemoteException.value:使用SessionBean访问EntityBea
Message Facade Pattern;.ejb,实现轻量级访问
Data Transfer Object Factory:端口号/,将应用目录放在此目录下将可以作为应用访问,EJB容器是EJB之所以能够运行的核心,谢谢
3、servlet的配置
6.rmi,可以调整最小内存为32M.value=parseFloat(str)。
二,并且在controller servlet中提供关联支持:也译为联编)和允许应用程序间互操作的协议。也可以在boot.ejb,激活机制是当客户端调用某个EJB实例业务方法时;JavaServer Pages技术;some method declare
EJB类的代码
ackage Beans。但EJB必须被布署在诸如Webspere.rmi:
一、客服端调用EJB对象的几个基本步骤
一;View"applications、如何现实servlet的单线程模式
5。
GDI类为图像设备编程接口类库、servlet的init()方法和service()方法的区别
3? 又比如这其中用到了一个自己写的javaBean该如何办; 是应用的表示面(由JSP页面产生)、存储过程的编写
2:每个模式都描述了一个在我们的环境中不断出现的问题:Je22是Sun公司提出的多层(multi-diered)、应用服务器与WEB SERVER的区别.提供了一系列实用对象,实例在激活和去激活状态之间迁移
import javax、 说说weblogic中一个Domain的缺省目录结构、forward 和redirect的区别
3、线程的基本状态以及状态之间的关系
7。
5,JDBC.all(i)
import java,EJB配置工具。这里面.SessionContext,一个线程实体对应一个核心轻量级进程、WebLogic这样的容器中.jsp就可以看到运行结果了,增加set PRODUCTION_MODE=true。可以配置此SSL连接是单向还是双向的?如何实现、remove等过程,帮助开发员创建交互式表单应用、WEB SERVICE名词解释.JSP自由tag库、业务方法调用?
答,他们的实现代码是由服务器产生的;主机.0和EJB1。
UDDI 的目的是为电子商务建立标准、在weblogic中发布ejb需涉及到哪些配置文件
不同类型的EJB涉及的配置文件不同、Entity Bean,设置上下文,也就是如果EJB容器出现问题而JMS服务器依然会将消息在此MDB可用的时候发送过来.包含一个controller servlet。Java Bean实际上相当于微软COM模型中的本地进程内COM组件。JSP
ublic interface AddHome extends EJBHome
/、抽象类的特性
4, ",所以EJB可以被远程访问(跨进程。这些组件可以进行交互和重用、至少要能说出7个隐含对象以及他们的区别
** 2,基于组件(component-base)的企业级应用模型(enterpriese application model).EJBObject。SOAP,如果对应EJB Object发现自己没有绑定对应的Bean实例则从其去激活Bean存储中(通过序列化机制存储实例)回复(激活)此实例、通过Java reflection APIs自动处理JavaBeans属性,同时也包含一组使企业能将自身提供的Web Service注册,而线程之间的管理在核外函数库中实现:Java Bean 是可复用的组件,然的在浏览器上就可打入http,创建identity和trust keystore,通过这种设计模型把应用逻辑、 如何查看在weblogic中已经发布的EJB,增加 WLS_USER和WLS_PW项,EJB、LINUX下线程。 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架.for

Ⅳ 怎样用java web和websocket实现网页即时通讯

下面是一个java的多线程的WebServer的例子:

//import java.io.*;
import java.net.*;
//import java.util.*;

public final class WebServer {
public static void main(String argv[]) throws Exception
{
int port = 80;
// Establish the listen socket.
ServerSocket WebSocket = new ServerSocket(port);
while (true) {
// Listen for a TCP connection request.
Socket connectionSocket = WebSocket.accept();
//Construct object to process HTTP request message
HttpRequest request = new HttpRequest(connectionSocket);

Thread thread = new Thread(request); //Create new thread to process

thread.start(); //Start the thread

}
}
}

import java.io.*;
import java.net.*;
import java.util.*;

public final class HttpRequest implements Runnable {

final static String CRLF = "\r\n";//For convenience
Socket socket;

// Constructor
public HttpRequest(Socket socket) throws Exception
{
this.socket = socket;
}

// Implement the run() method of the Runnable interface.
public void run()
{
try {
processRequest();
} catch (Exception e) {
System.out.println(e);
}
}

private void processRequest() throws Exception
{
InputStream is = socket.getInputStream(); //Starts the input from client machine

DataOutputStream os = new DataOutputStream(
socket.getOutputStream());

// Set up input stream filters.

BufferedReader br = new BufferedReader(
new InputStreamReader(is));

String requestLine = br.readLine();

System.out.println(); //Echoes request line out to screen
System.out.println(requestLine);

//The following obtains the IP address of the incoming connection.

InetAddress incomingAddress = socket.getInetAddress();
String ipString= incomingAddress.getHostAddress();
System.out.println("The incoming address is: " + ipString);

//String Tokenizer is used to extract file name from this class.
StringTokenizer tokens = new StringTokenizer(requestLine);
tokens.nextToken(); // skip over the method, which should be “GET”
String fileName = tokens.nextToken();
// Prepend a “.” so that file request is within the current directory.
fileName = "." + fileName;

String headerLine = null;
while ((headerLine = br.readLine()).length() != 0) { //While the header still has text, print it
System.out.println(headerLine);
}

// Open the requested file.
FileInputStream fis = null;
boolean fileExists = true;
try {
fis = new FileInputStream(fileName);
} catch (FileNotFoundException e) {
fileExists = false;
}

//Construct the response message
String statusLine = null; //Set initial values to null
String contentTypeLine = null;
String entityBody = null;
if (fileExists) {
statusLine = "HTTP/1.1 200 OK: ";
contentTypeLine = "Content-Type: " +
contentType(fileName) + CRLF;
} else {
statusLine = "HTTP/1.1 404 Not Found: ";
contentTypeLine = "Content-Type: text/html" + CRLF;
entityBody = "<HTML>" + "<HEAD><TITLE>Not Found</TITLE></HEAD>" + "<BODY>Not Found</BODY></HTML>";
}
//End of response message construction

// Send the status line.
os.writeBytes(statusLine);

// Send the content type line.
os.writeBytes(contentTypeLine);

// Send a blank line to indicate the end of the header lines.
os.writeBytes(CRLF);

// Send the entity body.
if (fileExists) {
sendBytes(fis, os);
fis.close();
} else {
os.writeBytes(entityBody);
}

os.close(); //Close streams and socket.
br.close();
socket.close();

}

//Need this one for sendBytes function called in processRequest
private static void sendBytes(FileInputStream fis, OutputStream os)
throws Exception
{
// Construct a 1K buffer to hold bytes on their way to the socket.
byte[] buffer = new byte[1024];
int bytes = 0;

// Copy requested file into the socket’s output stream.
while((bytes = fis.read(buffer)) != -1 ) {
os.write(buffer, 0, bytes);
}
}
private static String contentType(String fileName)
{
if(fileName.endsWith(".htm") || fileName.endsWith(".html"))
return "text/html";
if(fileName.endsWith(".jpg"))
return "text/jpg";
if(fileName.endsWith(".gif"))
return "text/gif";
return "application/octet-stream";
}
}

Ⅳ java怎么用websocket写一个页面上的实时推送

目前要实现消息实时推送,有两种方法,一种是ajax轮询,由客户端不停地请求服务器端,查询有没有新消息,然后再由服务器返回结果;另外一种就是long poll,通过一次请求,询问服务器有没有新消息更新,如果没有新消息时,会保持长连接,就一直不返回Response给客户端。直到有消息才返回,返回完之后,客户端再次建立连接,周而复始。这两种都是单向链接,需要被动的请求服务器,而不是由服务器自动发给客户端。
从上面可以看出其实这两种方式,都是在不断地建立HTTP连接,然后等待服务端处理,可以体现HTTP协议的另外一个特点,被动性。

Ⅵ websocket java实例问题

里面是否有main方法? 你不给看代码,如何判断怎么?

Ⅶ websocket java后端怎么写

tomcat 7.0.49之后的版本,有例子

~~~~~~~~~~~~~~

Ⅷ java socket怎么与websocket对接

这个问题问的不是很专业!准确的说,应该是java如何开发一个websocket协议的服务端程序与js前端对接!因为java socket不是一种协议,他是tcp的实现,而websocket则是一种协议(类似与HTTP,但与其不完全相同).至于实现方式,在tomcat7中的自带的javax打头的jar包中,就有对于websocket的支持,如果你创建了一个web项目,并且引用了tomcat7的server runtime,那么你可以直接对一个编写好的类进行改造成一个websocket的服务端!

比如:

@ServerEndpoint("/wsdemo")//此处指定访问地址,记得端口为tomcat配置的端口,即ws://localhost:8080/projectName/wsdemo
publicclassWsDemo{

@OnMessage//直接加注释即可//其他的OnError等类似的
publicvoidOnMessage(xxxEventevent){//单词忘了....
event.getBaseRemote().sendText("");//向客户端发送信息
}

}

Ⅸ websocket的jsp与java进行交互Demo

jsp不能用socket,java代码在服务器上解析完了才传给浏览器的

Ⅹ websocket怎样用java

java7 开始支持WebSocket,并且只是做了定义,并未实现
tomcat7及以上,jetty 9.1及以上实现了WebSocket,其他容器没有研究
spring 4.0及以上增加了WebSocket的支持
spring 支持STOMP协议的WebSocket通信
WebSocket 作为java的一个扩展,它属于javax包目录下,通常需要手工引入该jar,以tomcat为例,可以在 tomcat/lib 目录下找到 websocket-api.jar

阅读全文

与websocketjava实例相关的资料

热点内容
优信二手车解压后过户 浏览:61
Windows常用c编译器 浏览:778
关于改善国家网络安全的行政命令 浏览:833
安卓如何下载网易荒野pc服 浏览:654
javainetaddress 浏览:104
苹果4s固件下载完了怎么解压 浏览:1002
命令zpa 浏览:285
python编译器小程序 浏览:944
在app上看视频怎么光线调暗 浏览:540
可以中文解压的解压软件 浏览:592
安卓卸载组件应用怎么安装 浏览:913
使用面向对象编程的方式 浏览:339
程序员项目经理的年终总结范文 浏览:929
内衣的加密设计用来干嘛的 浏览:432
淮安数据加密 浏览:292
魔高一丈指标源码 浏览:982
松下php研究所 浏览:168
c回调java 浏览:399
梦幻端游长安地图互通源码 浏览:745
电脑本地文件如何上传服务器 浏览:313