自己写的一个简单的xmpp服务的中转站
require 'drb/drb'
require 'xmpp4r/client'
include Jabber
URI = "druby://localhost:8787"
QUEUE = Queue.new
ip_addr = "server地址"
server_str = "tester001@#{ip_addr}/testing" #用户名@服务器地址/资源号(资源号可以任意设定)
jid = JID::new(server_str)
password = '123456'
CLIENT = Client::new(jid)
CLIENT.connect
CLIENT.auth(password)
class XmppServer
def push(username, content)
m = M.new(username, content)
QUEUE.push m
end
end
consumer = Thread.new {
loop {
m = QUEUE.pop
puts m.username
to = "#{m.username}@weishanke.com/testing"
body = m.content
m = Jabber::Message::new(to, body).set_type(:normal).set_id('1')
CLIENT.send m
}
}
class M
attr_accessor :username, :content
def initialize(username, content)
@username = username
@content = content
end
end
FRONT_OBJECT = XmppServer.new
DRb.start_service(URI, FRONT_OBJECT)
DRb.thread.join
一个简单的客户端程序
require 'drb/drb'
SERVER_URI="druby://localhost:8787"
DRb.start_service
xmppserver = DRbObject.new_with_uri(SERVER_URI)
10.times do |i| xmppserver.push("tester002", "testdddeeee....") sleep 1end
整合在Rails项目中比较简单,将 如下代码放到config/initializers/xmpp4r.rb 代码
require 'drb/drb'
SERVER_URI="druby://localhost:8787"
DRb.start_service
Xmppserver = DRbObject.new_with_uri(SERVER_URI)
然后在程序中使用 Xmppserver.push username, content 就行