黄金&白银实时报价实现方法

  先声明,数据依旧来自 jin10.com。
  之前写了篇文章《加上了“财经消息”小工具。。。但我感觉应该没人会看》,是写的“财经消息”小工具里的资讯的推送,那个比较简单,因为金十的部分服务器没有验证 origin,拿来就能用。但报价的话就不行了,必须靠一台尽量快的服务器来中转数据(报价对实时性的要求极高),于是我还是选择了 Daocloud(关于 Docker 的使用:《初识 Docker – 使用 tenxcloud.com 搭建自己的应用》)来做中转。ok 废话少说,接下来就来看下源码,其实只有一个文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var Pio=require("socket.io-client");
var Psocket=Pio.connect("http://121.40.214.64:8080");
var Nsocket=Pio.connect("http://c3.jin10.com:8081");
var request = require('request');

var his = {};

Psocket.on('connect' , function() {
Psocket.emit('delAllSubscription' , []);
Psocket.emit('addSubscription' , ['XAUUSD' , 'XAGUSD' , 'UKOIL' , 'USOIL' , 'DXY' , 'EURUSD' , 'GC' , 'GBPUSD', 'USDJPY', 'AUDUSD', 'USDCHF', 'EURGBP', 'EURJPY', 'XPDUSD' , 'DOWI' ,'NASX' ,'SPX500' ,'JPN225' ,'SZZZ' ,'SZCZ' ,'XPTUSD']);
Psocket.emit('reqvote', "ok");
});
Nsocket.on('connect' , function() {
Nsocket.emit('reg', "ok");
});


app.get('/', function(req, res){
request('http://www.jin10.com/jin10.com.html', function (error, response, body) {
if (!error && response.statusCode == 200) {
res.header("Access-Control-Allow-Origin", "*");
res.send(body.replace(/\n|\s{3,}/g,""));
}
});
});

io.on('connection', function(socket) {
for (var i in his) {
io.emit('price list', his[i]);
}
});
Psocket.on('price list', function(msg) {
his[msg['name']]=msg;
io.emit('price list', msg);
console.log(msg);
});

Nsocket.on('user message', function(msg) {
io.emit('user message', msg);
console.log(msg);
});

http.listen(3000, function(){
console.log('listening on *:3000');
});

没错就是那么简单 = =