java消息推送websocket怎么实现

java消息推送websocket怎么实现,第1张

java消息推送websocket实现原理:在实现websocket连线过程中,需要通过浏览器发出websocket连线请求,然后服务器发出回应,这个过程通常称为“握手” 。在 WebSocket API,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

在以前的消息推送机制中,用的都是 Ajax 轮询(polling),在特定的时间间隔由浏览器自动发出请求,将服务器的消息主动的拉回来,这种方式是非常消耗资源的,因为本质还是http请求,而且显得非常笨拙。而WebSocket 在浏览器和服务器完成一个握手的动作,在建立连接之后,服务器可以主动传送数据给客户端,客户端也可以随时向服务器发送数据。

WebSocket协议是基于TCP的一种新的网络协议。实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。也可以选择第三方推送平台来实现,比如极光推送就不错。

我大致看了下代码,没有什么问题,你需要注意其他的地方:

服务器地址是否填写正确,有没有弄错,请在发送Socket请求之前Ping一下试试,如果通则代码可以正常访问,若不通,则地址一定有问题。

检查端口号是否有问题,服务器端口号有没有填写错误。

槛车服务器网络防火墙是否开启,默认开启状态下,你怎么的也是请求不进去的。

服务器服务是否正常开启,他不开启你怎么的也请求不进去。

package Server;

import javaio;

import javanet;

import messageMessageType;

//该线程用于和客服端进行通信,是一个线程类

public class ServerClientComunicationThread extends Thread{

Socket s=null;

ObjectInputStream ois=null;

MessageType mt=null;

ObjectOutputStream oos=null;

public ServerClientComunicationThread(Socket s){

thiss=s;

}

public void run(){

//不停地从socket里面读取数据

while(true){

try {

ois=new ObjectInputStream(sgetInputStream());

mt=(MessageType)oisreadObject();

Systemoutprintln("服务器读取到的信息");

Systemoutprintln(mtgetContent()+" "+mtgetGetter()+" "+

mtgetMessagetype()+mtgetSendTime());

//将读取到的数据转发给对应的客服端

Systemoutprintln("从集合里面可以找到用户压迫将数据发送给"+ ManageOnlineUserhmget(mtgetGetter()));

oos=new ObjectOutputStream(( ManageOnlineUserhmget(mtgetGetter()))getOutputStream());

ooswriteObject(mt);

} catch (Exception e) {

eprintStackTrace();

}

}

}

}

客服端:

package MyKeFudaun;

import javaioBufferedReader;

import javaioBufferedWriter;

import javaioIOException;

import javaioInputStreamReader;

import javaioOutputStreamWriter;

import javanetSocket;

import javanetUnknownHostException;

public class KeFuDuan {

public static void main(String[] args) {

KeFuDuan kf = new KeFuDuan();

kfstart();

}

public void start(){

Socket sco;

String ss= "";

try {

sco = new Socket("127001",8866);

KeFuduanJie kf = new KeFuduanJie(sco);

KeFuWuFasong kfs = new KeFuWuFasong(sco);

kfstart();

kfsstart();

//scoclose();

} catch (UnknownHostException e) {

// TODO Auto-generated catch block

eprintStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

}

class KeFuduanJie extends Thread{

Socket soc;

String ss;

BufferedReader br;

public KeFuduanJie(Socket soc){

try {

thissoc = soc;

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

} catch (IOException e) {

eprintStackTrace();

}

}

//负责接受服务端来的信息

public void run(){

while(true){

//接受服务器端来的信息

try {

ss = brreadLine();

Systemoutprintln("服务器---->客服端: "+ss);

} catch (IOException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

}

}

//向服务器发送东西

class KeFuWuFasong extends Thread{

Socket soc;

BufferedWriter bw;

BufferedReader brr;

public KeFuWuFasong(Socket soc){

thissoc = soc;

try {

brr =new BufferedReader(new InputStreamReader(Systemin));

bw = new BufferedWriter(new OutputStreamWriter(socgetOutputStream()));

} catch (IOException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

public void run(){

while(true){

//向服务器发送请求

try {

bwwrite(brrreadLine());

bwnewLine();

bwflush();// 或者用bwclose()

} catch (IOException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

}

}

服务器端:

package MyKeFudaun;

import javaioBufferedReader;

import javaioBufferedWriter;

import javaioIOException;

import javaioInputStreamReader;

import javaioOutputStreamWriter;

import javanetServerSocket;

import javanetSocket;

public class Server {

public static void main(String[] args) {

Server server = new Server();

serverstart();

}

public void start(){

try { //服务器端打开端口

ServerSocket server = new ServerSocket(4499);

Socket socket = null;

ServerToClientThread stct = null;

while(true){

socket = serveraccept(); //迎接(接收)客户端的Socket访问

stct = new ServerToClientThread(socket); //分配一个新线程负责和信赖的Socket沟通

stctstart();

}

} catch (IOException e) {

eprintStackTrace();

}

}

}

package MyKeFudaun;

import javaioBufferedReader;

import javaioIOException;

import javaioInputStreamReader;

import javanetSocket;

public class ServerReceiveFromClient extends Thread{

Socket socket;

BufferedReader br;

String s;

public ServerReceiveFromClient(Socket socket){

thissocket = socket;

try {

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

} catch (IOException e) {

eprintStackTrace();

}

}

public void run(){

while(true){

try {

s = brreadLine();

Systemoutprintln(socketgetInetAddress()getHostAddress()+"发送了:"+s);

} catch (Exception e) {

eprintStackTrace();

}

}

}

}

package MyKeFudaun;

import javaioBufferedReader;

import javaioBufferedWriter;

import javaioIOException;

import javaioInputStreamReader;

import javaioOutputStreamWriter;

import javanetSocket;

public class ServerToClientThread extends Thread{

Socket socket;

BufferedReader br;

BufferedWriter bw;

String s;

//建立的同时,和客户端的Socket建立输入、输出流

public ServerToClientThread(Socket socket){

thissocket = socket;

try {

bw = new BufferedWriter(new OutputStreamWriter(socketgetOutputStream()));

} catch (IOException e) {

eprintStackTrace();

}

}

public void run(){

ServerReceiveFromClient srfc = new ServerReceiveFromClient(socket);

srfcstart();

while(true){

try {

bwwrite("欢迎光临。");

bwnewLine();

bwflush();

Threadsleep(101000);

} catch (IOException e) {

eprintStackTrace();

} catch (InterruptedException e) {

eprintStackTrace();

}

}

}

}

你服务器accept方法后是不是会得到一个Socket

为这个Socket(是通过这个Socket和客户端的Socket进行沟通)分配一个服务

我是这么用的ServerThread tt=new ServerThread(socket);

class ServerThread

{

private Socket so;

    public ServerThread(Socket s)

    {

        thisso=s;

    }

public void send()

{

}

public void receive()

{

    Thread re=new Thread()

        {

            public void run()

            {

               }

        }

}

}

相当于你用手机拨打人工服务,会给你分配一个客服

为这个Socket分配后,写一个发送方法,和一个接收方法(线程)

然后把ServerThread tt=new ServerThread(socket);中的tt保存到集合中去,要单独给某个发送

就从集合中取出来send();这个方法应该带个参数,把消息对象传过去就是

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » java消息推送websocket怎么实现

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情