Android 4.4 WebView实现WebSocket即时通讯

本文介绍了在Android 4.4中如何使用WebView实现WebSocket进行即时通讯。从Android版本要求和HTML5 API支持谈起,重点讨论了WebSocket Server端和Client端的实现,包括一个基于php的WebSocket Server示例。
摘要由CSDN通过智能技术生成

参考博客

 Android HTML5多线程&本地缓存&文件上传

Websocket协议的学习、调研和实现

 

Android版本要求及H5 api支持情况

在Android版本4.4之前,由于维护和开发Android版本时使用的是AppleWebkit开源内核,虽然也非常不错,但不支持许多html5 api,在Android4.4使用了Chromium才得以发展,

目前支持的html 5如下:

Web Workers 支持 javaScript多线程
WebSocket 支持 javascript套接字,TCP长链接
IDBFactory/indexDB 支持 索引数据库
ApplicationCache 支持 web离线缓存
postMessage/onMessage 支持 收发消息
ondeviceorientation,ondevicemotion,onorientationchange 支持 屏幕旋转,移动
onvolumechange 支持 声音改变
RequestAnimationFrame 支持 页面UI动画更新引擎
LocalStorage/sessionStorage 支持 本地缓存
FileReader 支持 本地文件读取
FormData 支持 模拟表单,表单模型
EventSource 支持 Server-Sent Events(SSE)功能,允许服务端推送数据到客户端。(通常叫数据推送)
CacheStorage 不支持 异步缓存
Promise 不支持 异步范式
Crypto 不支持 javascript加密API
WebAudio 不支持 流媒体播放
WebRTC 不支持 流媒体通讯
WebGL 不支持 Web GL图像框架
GeoLocation 支持 地理定位
Notification 不支持 web通知
Blob 支持 二进制数据对象

 

在这里我们主要了解WebSocket在Android WebView上的支持,这里给出一个基于php WebSocketServer的例子:

【以下例子来自开源中国博客】

体验位置:http://www.yxsss.com/ui/sk.html

请使用你的PC浏览器和你的Android4.4的设备上的浏览器

 

WebSocket Server端实现

php端

<?php
error_reporting(E_ALL ^ E_NOTICE);
ob_implicit_flush();
 
class Sock{
    public $sockets;
    public $users;
    public $master;
     
    private $rec_data_packets=array();//已接收的数据
    private $sum_length=array();//数据总长度
    private $rec_data_length=array();//接收数据的长度
    private $salt_key=array();//加密key
    private $per_data_len=array(); //每组数据长度
     
    public function __construct($address, $port,$maxLink=16){
        $this->master=$this->createSocketServer($address, $port,$maxLink);
        $this->sockets=array($this->master);
    }
     
    function run()
    {
        while(true){
            $changes=$this->sockets;
            $write=NULL;
            $except=NULL;
            
            socket_select($changes,$write,$except,NULL); 
            /**
            *  监听读写操作,socket_select (array &$read, array &$write, array &$except, $tv_sec, $tv_usec = null)
            *  $read 注意,这里使用了引用,$read表示要监听读操作的socket,socket_select可以调用多次,之前监听的socket不会被取消(注意,socket连接也是read)
            *  $write 注意,这里使用了引用,$read表示要监听写操作的socket,socket_select可以调用多次,之前监听的socket不会被取消
            *  $$except 监听异常的socket
            *  以上&read,&write,&except是被引用的,也就意味着变量的值可以输入输出,把监听到的socket输出,把想被监听的socket输入
            *  最后一个参数是超时时间,默认是0
            *  
            *  该函数会阻塞
            */
            foreach($changes as $sock){
                if($sock==$this->master){
                	/**
                	 * 接受客户端
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值