android利用WebSocket实现消息推送

1、webSocket服务端的配置与代码:

(1)、服务器端工程目录结构:

(2)、web.xml的配置

  <servlet-name>webSocketServlet</servlet-name>
        <servlet-class>com.cn.controller.WebSocketServletService</servlet-class>
      </servlet>
    <servlet-mapping>
        <servlet-name>webSocketServlet</servlet-name>
        <url-pattern>/webSocketServlet</url-pattern>
    </servlet-mapping>

(3)、服务端代码

public class WebSocketServletService extends WebSocketServlet{

private static final long serialVersionUID = 1L;
  
 private static List<MyMessageInbound> myMessageInbounds = new
ArrayList<WebSocketServletService.MyMessageInbound>();
    @SuppressWarnings("deprecation")
    @Override
    protected StreamInbound createWebSocketInbound(String arg0,
            HttpServletRequest arg1) {
        // TODO Auto-generated method stub
        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;
                myMessageInbounds.add(this);
                outbound.writeTextMessage(CharBuffer.wrap("Hello!"));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

@Override
        public void onClose(int status) {
            System.out.println("Close Clients.");
            myMessageInbounds.remove(this);
        }

/**
         * 接收消息
         */
        @Override
        public void onTextMessage(CharBuffer cb) throws IOException {
            System.out.println("Accept Message : " + cb);
            for (MyMessageInbound myMessageInbound : myMessageInbounds) {
                CharBuffer buffer = CharBuffer.wrap(cb);
                myMessageInbound.myoutbound.writeTextMessage(buffer);
                myMessageInbound.myoutbound.flush();
            }
        }
        @Override
        public void onBinaryMessage(ByteBuffer bb) throws IOException {
        }
    }
}
2、android客户端配置与代码

(1)、导入java-websocket-1.3.0.jar

(2)、客户端代码

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    Handler handler=new Handler()
    {

@Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            Toast.makeText(MainActivity.this, msg.getData().getString("info"),Toast.LENGTH_SHORT).show();
        }
        
    };
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            URI uri=null;
            try {
                uri = new URI("ws://localhost/Breed/webSocketServlet");
            } catch (URISyntaxException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            WebSocketWorker webSocketWorker=new WebSocketWorker(uri, new Draft_17());
            try {
                webSocketWorker.connectBlocking();//此处如果用webSocketWorker.connect();会出错,需要多注意
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            webSocketWorker.send("text");
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    
    private class WebSocketWorker extends WebSocketClient{

public WebSocketWorker(URI serverUri, Draft draft) {
            super(serverUri, draft);
        }

@Override
        public void onClose(int arg0, String arg1, boolean arg2) {
            // TODO Auto-generated method stub
            
        }
        @Override
        public void onError(Exception arg0) {
            // TODO Auto-generated method stub
            
        }

@Override
        public void onMessage(String arg0) {
            // TODO Auto-generated method stub
            Bundle bundle=new Bundle();
            bundle.putString("info",arg0);
            Message message=new Message();
            message.setData(bundle);
            handler.sendMessage(message);
        }

@Override
        public void onOpen(ServerHandshake arg0) {
            // TODO Auto-generated method stub
            
        }
        
    }
}

时间: 2024-10-24 10:41:16

android利用WebSocket实现消息推送的相关文章

android 利用androidnp实现消息推送

利用androidnp实现消息推送 介绍: 推送:所谓的消息推送就是从服务器端向移动终端发送连接,传输一定的信息. 服务器端向Android客户端的推送,主要有三种方式: 1.客户端定时去服务端取或者保持一个长Socket,从本质讲这个不叫推送,这是去服务端拽数据.但是实现简单,主要缺点:耗电等 2.Google的C2DM,服务器在国外,不稳定. 3.XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩展性.它的特点是将复杂性从客户端转移到了服务器端. 2. XMPP协议 XMPP

在Spring Boot框架下使用WebSocket实现消息推送

Spring Boot的学习持续进行中.前面两篇博客我们介绍了如何使用Spring Boot容器搭建Web项目(使用Spring Boot开发Web项目)以及怎样为我们的Project添加HTTPS的支持(使用Spring Boot开发Web项目(二)之添加HTTPS支持),在这两篇文章的基础上,我们今天来看看如何在Spring Boot中使用WebSocket. 什么是WebSocket WebSocket为浏览器和服务器之间提供了双工异步通信功能,也就是说我们可以利用浏览器给服务器发送消息,

Android 基于Netty的消息推送方案之概念和工作原理(二)

上一篇文章中我讲述了关于消息推送的方案以及一个基于Netty实现的一个简单的Hello World.为了更好的理解Hello World中的代码,今天我来解说一下关于Netty中一些概念和工作原理的内容,假设你认为本篇文章有些枯燥.请先去阅读<Android 基于Netty的消息推送方案之Hello World(一)> ChannelEvent Netty是基于事件驱动的,就是我们上文提到的.发生什么事.就通知"有关部门". 所以.不难理解.我们自己的业务代码中,一定有跟这

Android 基于Netty的消息推送方案之对象的传递(四)

在上一篇文章中<Android 基于Netty的消息推送方案之字符串的接收和发送(三)>我们介绍了Netty的字符串传递,我们知道了Netty的消息传递都是基于流,通过ChannelBuffer传递的,那么自然,Object也需要转换成ChannelBuffer来传递.好在Netty本身已经给我们写好了这样的转换工具.ObjectEncoder和ObjectDecoder,下面我们介绍一个案例. 1. 我们构造一个用来传输的对象(JavaBean) [java] view plaincopy

Android 基于Netty的消息推送方案之字符串的接收和发送(三)

在上一篇文章中<Android 基于Netty的消息推送方案之概念和工作原理(二)> ,我们介绍过一些关于Netty的概念和工作原理的内容,今天我们先来介绍一个叫做ChannelBuffer的东东. ChannelBuffer Netty中的消息传递,都必须以字节的形式,以ChannelBuffer为载体传递.简单的说,就是你想直接写个字符串过去,对不起,抛异常.虽然,Netty定义的writer的接口参数是Object的,这可能也是会给新上手的朋友容易造成误会的地方.Netty源码中,是这样

Jpush之如何利用HttpClient实现消息推送到手机

开心一笑 [1.再逼我,再逼我就装死给你看. 2.打死我也不说,你还没使美人儿计呢. 3.帅有个P用?搞不好还不是被卒子给吃掉. 4.别紧张,我不是什么好人. 5.够不着吧,左脚踩右脚上试试. 只为逗你一笑] 提出问题 后端如何利用Jpush极光推送消息到手机端??? 解决问题 Jpush极光文档官网 http://docs.jiguang.cn/jpush/guideline/intro/ Jpush产品简介 JPush是经过考验的大规模APP推送平台,每天推送消息数超过5亿条. 开发者集成S

利用socket进行消息推送

对于利用socket通信进行消息推送,我研究了两三天吧,当然是在前几天研究消息推送机制以及第三方和轮询的基础上进行的,以下是我的一些感想吧,有不正确或者不完善的地方希望大家提出来一起研究吧. 1.首先,了解socket的连接过程: 1)服务器监听:2)客户端请求:3)连接确认(具体详情可以见百度百科,我在这也就不多说了). 2.socket通信机制: 服务器端 一.创建服务器套接字(CREATE). 二.服务器套接字进行信息绑定(BIND),并开始监听连接(LISTEN). 三.接受来自客户端的

WebSocket与消息推送

B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为服务器不需要与客户端长时间建立一个通信链接,但不容易直接完成实时的消息推送功能,如聊天室.后台信息提示.实时更新数据等功能,但通过polling.Long polling.长连接.Flash Socket以及HTML5中定义的WebSocket能完成该功能需要. 一.Socket简介 Socket又称"套接字",应用程序通常通过

C#解惑3——WebSocket与消息推送(转)

目录 一.Socket简介 二.WebSocket简介与消息推送 三.WebSocket客户端 四.WebSocket服务器端 五.测试运行 六.小结与消息推送框架 6.1.开源Java消息推送框架 Pushlet 6.2.开源DotNet消息推送框架SignalR 七.代码下载 7.1.Java实现的服务器端代码与客户端代码下载 7.2.DotNet服务器端手动连接实现代码下载 7.3.DotNet下使用SuperWebSocket三方库实现代码下载 B/S结构的软件项目中有时客户端需要实时的