我正在开发一个TCP代理,它将放在TCP服务之前,该服务应该处理来自通配Internet的500到1000个活动连接.
代理与服务在同一台机器上运行,并且大部分都是透明的.该服务在很大程度上不知道代理,唯一的例外是通知客户端的真实远程IP地址.
这意味着,对于每个入站打开的TCP套接字,服务器上还有两个套接字:代理中的第二个套接字,以及代理后面的真实服务上的套接字.
两个代理套接字上的send和recv窗口大小设置为1024字节.
对此有何影响?这个配置有多慢?我是否应该努力改变服务以使用命名管道(或其他IPC机制),或者localhost TCP套接字在很大程度上是一个有效的IPC?
这两个应用程序的合并不是一种选择.现在我们坚持使用两个流程配置.
编辑:在同一硬件上进行两个独立过程的原因是100%经济性.我们只有一台服务器,我们不打算获得更多(没有钱).
TCP服务是Visual Basic 6中的遗留软件,它超出了我们的预期.代理是C++.我们没有时间,金钱和人力来重写和迁移VB6代码到现代编程环境.
代理是我们尝试缓解服务的特定性能问题,这是我们不时会遇到的DDoS攻击.
代理是开源的,这是项目源代码.
我想在Python上用繁重的用户界面创建一个2D游戏:窗口,按钮,文本输入等.到目前为止,我一直在使用PyGame进行一些简单的游戏.
游戏是2D MUD,标准渲染循环在屏幕上绘制内容.我需要用户界面与销售,铁匠等游戏实体进行交互.
我正在寻找像Pygame和wxPython/pyQT/pyGTK混合的东西.
我可以使用哪些库?
我正在进行源代码迁移,转换器程序没有使用整数转换嵌入字符串的串联.现在我有很多代码用这种表达式:
f("some text" + i);
Run Code Online (Sandbox Code Playgroud)
由于C/C++将其解释为数组下标,f
将收到"some text"
,或"ome text"
,或"me text"
...
我的源语言将字符串的串联转换为int作为字符串连接.现在我需要逐行浏览源代码并手动将前一个表达式更改为:
f("some text" + std::to_string(i));
Run Code Online (Sandbox Code Playgroud)
转换程序设法将本地" String
"变量转换为" std::string
",从而产生表达式:
std::string some_str = ...;
int i = ...;
f(some_str + i);
Run Code Online (Sandbox Code Playgroud)
这些很容易修复,因为有了这样的表达式,C++编译器会输出错误.
是否有任何工具可以在源代码上自动找到这样的表达式?
我有一个str
大约1GB的长度:
>>> len(L)
1073741824
Run Code Online (Sandbox Code Playgroud)
我需要从特定索引中取出许多字符串,直到字符串结束.在C我会这样做:
char* L = ...;
char* p1 = L + start1;
char* p2 = L + start2;
...
Run Code Online (Sandbox Code Playgroud)
但在Python中,切片字符串会str
使用更多内存创建一个新实例:
>>> id(L)
140613333131280
>>> p1 = L[10:]
>>> id(p1)
140612259385360
Run Code Online (Sandbox Code Playgroud)
为了节省内存,我如何创建一个类似str的对象,实际上是指向原始L的指针?
编辑:我们有buffer
和memoryview
在Python 2和Python 3中,但memoryview
没有展示与str
or或相同的界面bytes
:
>>> L = b"0" * 1000
>>> a = memoryview(L)
>>> b = memoryview(L)
>>> a < b
Traceback (most recent call last):
File "<stdin>", line 1, in …
Run Code Online (Sandbox Code Playgroud) 我用SWIG(Python作为目标)包装一个库.库函数包含数据类型为"uint32_t","uint8_t"等的参数.我想尽可能创建跨平台的接口,所以我想在我的interface.i
文件中使用原始函数签名.例如:
uint32_t func(uint32_t a, uint32_t b);
Run Code Online (Sandbox Code Playgroud)
我试图解决的问题是,除非有一大口将无法识别该参数为整数typedef
的uint32_t
数据类型.现在我在接口文件上使用它:
typedef unsigned uint32_t;
Run Code Online (Sandbox Code Playgroud)
删除该typedef
行将导致该函数无法从目标Python绑定中调用:
>>> mylib.func(2, 2)
TypeError: in method 'func', argument 1 of type 'uint32_t'
Run Code Online (Sandbox Code Playgroud)
以前typedef
在我的本地机器上是可以的,但在另一个编译器/平台上可能有所不同.使用该指令%include "stdint.h"
将在SWIG上引发错误:
/usr/include/stdint.h:44: Error: Syntax error in input(1).
Run Code Online (Sandbox Code Playgroud)
由于SWIG不是一个功能齐全的编译器,因此无法完全评估#ifdef
该标头上的所有内容.
如何使用编译器在stdint.h
标题上选择的数据类型正确地提供SWIG ?事实上确实是有意义的,严格执行正确的数据类型,或者只是typedef
荷兰国际集团所有intX_t
以long
正常?
我得到了一个JAR形式的"API",可以从我的Java-Seam-Hibernate应用程序中执行一些外部会计操作.
在内部,API是一个简单的Hibernate应用程序,除了Seam本身使用的数据源外,还使用两个独立的数据源.
问题是,在执行内部.commit()时,其中一个"API"操作会引发以下异常:
java.sql.SQLException: You cannot commit during a managed transaction!
at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.jdbcCommit(BaseWrapperManagedConnection.java:543)
at org.jboss.resource.adapter.jdbc.WrappedConnection.commit(WrappedConnection.java:334)
at org.hibernate.transaction.JDBCTransaction.commitAndResetAutoCommit(JDBCTransaction.java:139)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:115)
at com.other.APIAccountingImpl.moneyMovement(APIAccountingImpl.java:261)
at com.myapp.integration.ExternalApiIntegrator.storeAcountingData(ExternalApiIntegrator.java:125)
at com.myapp.session.EmployeeAccounting.persistData(EmployeeAccounting.java:123)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at ...
Run Code Online (Sandbox Code Playgroud)
moneyMovement方法的源代码看起来像标准的Hibernate Session事务习惯用法:
Session sess = factory.openSession();
Transaction tx;
try {
tx = sess.beginTransaction();
//do some work
...
tx.commit();
}
catch (Exception e) {
if (tx!=null) tx.rollback();
throw e;
}
finally {
sess.close();
}
Run Code Online (Sandbox Code Playgroud)
我正在使用JAM的Seam托管交易.我也被迫使用自定义API,我不允许改变源代码.
我有什么选择?如何从"API"Hibernate会话中隔离Seam管理的事务?是否可以将特定数据源的连接配置为托管trx?
可能重复:
Python变量范围问题
Python手册将范围定义为:
范围定义块内名称的可见性.如果在块中定义了局部变量,则其范围包括该块.如果定义发生在功能块中,则作用域将扩展到定义块中包含的任何块,除非包含的块为名称引入了不同的绑定.
我有这个程序:
import random
def f():
a = "Is the scope static?"
if random.randint(0, 1) == 1:
del a
print a
Run Code Online (Sandbox Code Playgroud)
打印失败的可能性为50%:
>>> f()
Is the scope static?
>>> f()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in f
UnboundLocalError: local variable 'a' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我认为print语句有50%的可能性超出了'a'的范围,但我可能错了.Python中范围的"正确"解释是什么?Python中变量的范围是静态定义的吗?变量"a"的范围是什么?
我知道这很愚蠢,但我正在自动迁移一些代码.我的源语言允许字符串和整数之间的隐式转换,例如,这是允许的:
var = "hello " + 2
print(var) # prints "hello 2"
Run Code Online (Sandbox Code Playgroud)
可我怎么在C++重载+运算符const char*
和int
?我收到错误:
错误:'std :: string operator +(char*const&,int)'必须具有类或枚举类型的参数
python ×4
c ×2
c++ ×2
c++11 ×1
gcc ×1
hibernate ×1
java ×1
jta ×1
memory ×1
migration ×1
named-pipes ×1
performance ×1
pygame ×1
python-2.x ×1
python-3.x ×1
seam ×1
sockets ×1
swig ×1
transactions ×1
windows ×1