Ubuntu 12.04 で Python 2.7.3 と Node.js 0.10.37 を使用しており、zerorpc を使用してノード js から python を呼び出しています。私の python はポート 9004 で実行され、ノード クライアントは 9004 ポートをリッスンします。Node js から Python でメソッドを呼び出しているときに、以下のエラーが発生します。
ERROR:zerorpc.channel:zerorpc.ChannelMultiplexer ignoring error on recv
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/zerorpc/channel.py", line 79, in _channel_dispatcher
event = self._events.recv()
File "/usr/local/lib/python2.7/dist-packages/zerorpc/events.py", line 341, in recv
event = Event.unpack(get_pyzmq_frame_buffer(blob))
File "/usr/local/lib/python2.7/dist-packages/zerorpc/events.py", line 198, in unpack
unpacked_msg = unpacker.unpack()
File "/usr/local/lib/python2.7/dist-packages/msgpack/fallback.py", line 570, in unpack
ret = self._fb_unpack(EX_CONSTRUCT, write_bytes)
File "/usr/local/lib/python2.7/dist-packages/msgpack/fallback.py", line 498, in _fb_unpack
typ, n, obj = self._read_header(execute, write_bytes)
File "/usr/local/lib/python2.7/dist-packages/msgpack/fallback.py", line 347, in _read_header
b = ord(c)
TypeError: ord() expected string of length 1, but memoryview found
私の Node.js クライアント側コード:
var express = require('express');
var zerorpc = require('zerorpc');
var router = express.Router();
var client = new zerorpc.Client({timeout:30, heartbeatInterval:30000});
client.connect("tcp://0.0.0.0:9004");
router.post('/validateUser/', function(req, res, next){
var user_name = req.body.user_name;
client.invoke("validate_user", user_name, function(request, response, more){
res.send(response);
});
});
私のPythonコード:
import zerorpc
class User():
def validate_user(self, user_name):
print user_name
if __name__ == "__main__":
obj = User()
s = zerorpc.Server(obj)
s.bind("tcp://0.0.0.0:9004")
s.run()
Pythonのprintステートメントでさえ実行されていません。
zerorpcとzmqをアンインストールして再インストールしてみました。しかし、それでも同じエラー、同じコードが同じアーキテクチャの別の Ubuntu マシンで動作していました。