我已经阅读了奥尔良常见问题解答,当分裂脑可能发生但我不明白可能发生什么不好以及如何正确处理它.
常见问题解答说的含义如下:
您只需要考虑在编写应用程序时有两个actor实例的罕见可能性.
但实际上我应该如何考虑这一点以及如果不这样做会发生什么?
Orleans Paper(http://research.microsoft.com/pubs/210931/Orleans-MSR-TR-2014-41.pdf)说:
应用程序可以依赖外部持久存储来提供更强的数据一致性
但我不明白这意味着什么.
假设裂脑发生了.现在我有一个谷物的两个实例.当我发送一些消息时,这两个消息可能被接收(或者甚至可能有更多?)不同的实例.假设在接收这些消息之前的每个实例都具有相同的状态.现在,在处理这些消息后,它们具有不同的状态.
他们应该如何坚持自己的国家?可能存在冲突.
当另一个实例将被销毁时,只有一个实例将会被破坏的实例状态发生?它们处理过的消息从未被处理过吗?然后客户端状态和服务器状态可以是去同步化的IIUC.
我认为(裂脑)是一个大问题,我不明白为什么对它的关注很少.
Web角色(Node.js)和工作者角色(Node.js)之间的区别是什么?两者都可以在80端口上运行.两者的代码完全相同.我知道Web角色在IIS上运行,但是如果Node.js有自己的WebServer,我为什么需要IIS作为代理呢?
我们假设我有一个聊天应用程序.
客户端向聊天发送消息,导致某些Actor的某些命令.现在,我想立即处理他写的内容,并在此聊天中将其提供给其他用户,因此我处理此命令.同时我想告诉自己(一个演员)我需要在聊天记录数据库中存储此消息但不是现在.保存到数据库应该每2分钟发生一次.如果发生崩溃,我应该能够坚持到数据库.
我假设工作流程是这样的:
如何在Akka中构建这样的东西?我应该使用哪些功能/哪种模式?
我这样做:
<<a :: big-size(16), b :: big-size(16), c :: big-size(16)>> = <<0, 1, 0, 2, 0, 3>>
Run Code Online (Sandbox Code Playgroud)
然后结果将是:
a = 1
b = 2
c = 3
Run Code Online (Sandbox Code Playgroud)
但我真正需要的是:
a = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这一目标?
我想做这样的事情:
from ctypes import *
class Packet(BigEndianStructure):
_fields_ = [("length", c_ushort),
("session", c_uint),
("command", c_ushort)]
class PacketString(BigEndianStructure):
_fields_ = [("length", c_ushort),
("value", c_char_p)]
class InitialPacket(Packet):
_fields_ = [("time", PacketString)]
Run Code Online (Sandbox Code Playgroud)
但是我收到错误,因为 c_char_p 只能采用本机字节顺序。但也许还有其他方法可以制作长度在它们之前指定的字符串。我只是喜欢结构如何轻松地从套接字读取/写入。以及如何定义 _fields_ 然后可以像这样使用它:
initialPacket = InitialPacket()
initialPacket.command = 128
Run Code Online (Sandbox Code Playgroud)
问题是:如何在 BigEndianStructure 中创建可变长度字段?因为Python不允许我使用c_char_p。脚本根本不会运行。这是错误:
Traceback (most recent call last):
File "C:\PKOEmu\test.py", line 8, in <module>
class PacketString(BigEndianStructure):
File "C:\Python27\lib\ctypes\_endian.py", line 34, in __setattr__
fields.append((name, _other_endian(typ)) + rest)
File "C:\Python27\lib\ctypes\_endian.py", line 24, in _other_endian
raise TypeError("This type does not support other endian: …Run Code Online (Sandbox Code Playgroud) akka ×1
azure ×1
cap-theorem ×1
crdt ×1
ctypes ×1
elixir ×1
endianness ×1
node.js ×1
orleans ×1
python ×1