導航:首頁 > 編程語言 > 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
安卓卸載組件應用怎麼安裝 瀏覽:912
使用面向對象編程的方式 瀏覽:339
程序員項目經理的年終總結範文 瀏覽:929
內衣的加密設計用來幹嘛的 瀏覽:432
淮安數據加密 瀏覽:292
魔高一丈指標源碼 瀏覽:982
松下php研究所 瀏覽:168
c回調java 瀏覽:399
夢幻端游長安地圖互通源碼 瀏覽:745
電腦本地文件如何上傳伺服器 瀏覽:313