2017年1月

socket.io通信

春节放假了,打算把搁了很久的项目做了。

项目的来源是这样的:
虾米音乐把直播间功能砍掉了。
直播间就是播主放什么歌,观众也能跟着听的一个功能。
可以一起听歌的意思。

然后我就立了flag说要做个谷歌插件来实现被他砍掉的直播间功能。
主要功能就是在观众端同步执行播主进行的操作就好了。

于是开始写了。

准备
因为这个功能是实时性的,就想到用socket.io。
要用socket的话,要先安装node。
nodejs并不在ubuntu的默认源中,需要自行添加ppa再安装。

新建package.json文件,里面写{}。安装express包和socket包。
npm install --save express
npm install --save socket.io

安装完毕,再写个基本的端口监听和返回响应的功能,存为index.js

var app = require('express')();
var server = require('http').Server(app);

var listen_port = 9999;
server.listen( listen_port );

//route
app.get('/', function( request, response ){
    response.send('Hello world');
});

在这里监听的是9999端口。
输入node index.js就能启动服务器了。
目前没有在启动的时候输出内容,所以运行上面的命令后是没有任何输出内容的。
直接访问相应地址就可以看到运行结果。运行结果应该是会输出“Hello world”。

插件的撰写过程就另开一篇文章写吧。
插件实现的最主要功能就是往页面里插入代码。
插入的代码就是socket的客户端。

代码
好了,现在写客户端。

var socket_server, socket;

$(document).ready(function () {
    var btn = $('<button>').attr('id','test').css({
        'outline':'3px solid green',
        'position':'absolute',
        'top':'0',
        'left':'0',
    'width': '100px',
    'height': '30px'
    });
    $('#player-main').append(btn);

    socket_server = 'http://plamenatv.free.bg/up.html //socket地址
    socket = io( socket_server );

    $('#test').on('click', function(){
        socket.emit('player.pause', 'Amethyst'); //触发事件player.pause,发送数据为Amethyst
    });
});

与此同时,服务端也要相应的增加了。

...  //原来写的代码
io.on('connection', function( socket ){
    socket.on('player.pause', function( message ){  //监听事件
        console.log('Player paused ' + message + '.'); //把收到的消息打印出来
    });
});

[未解决]mac下./configure,C编译器无法创建可执行文件

pecl install redis未果,打算自己下载编译。
第一步phpize是可以执行的,但是到了第二步./configure就不行了。

$ ./configure
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for a sed that does not truncate output... /usr/local/opt/gnu-sed/libexec/gnubin/sed
checking for cc... cc
checking whether the C compiler works... no
configure: error: in `/Users/pires/codes/php-redis/redis-3.1.0':
configure: error: C compiler cannot create executables
See `config.log' for more details

centos7.3升级OpenSSL

按照文档直接./config是不行的。
我对centos不是很熟,尝试了好几个路径都不行。
最后按照这个文章所述调整了config参数就可以了.
./config --prefix=/usr --openssldir=/usr/local/openssl shared

pecl 居然没有mongodb包了?

上一篇升级Mac(El Capitan)内置PHP后,安装MongoDB扩展pecl install mongodb居然用不了?
提示No releases available for package "pecl.php.net/mongodb"
坑?

pecl download mongodb尝试手动编译安装,也提示一样的错误。
我就不信没有这个包啊,PECL-MongoDB上都有的。
试试搜索吧pecl search mongo
结果:

$ pecl search mongo
Connection to `ssl://pecl.php.net:443' failed:

无奈用curl下载源文件自行编译安装了。
有空再折腾这个问题。