小编vz0*_*vz0的帖子

TCP套接字与Windows上用于localhost IPC的命名管道相比有多慢?

我正在开发一个TCP代理,它将放在TCP服务之前,该服务应该处理来自通配Internet的500到1000个活动连接.

代理与服务在同一台机器上运行,并且大部分都是透明的.该服务在很大程度上不知道代理,唯一的例外是通知客户端的真实远程IP地址.

这意味着,对于每个入站打开的TCP套接字,服务器上还有两个套接字:代理中的第二个套接字,以及代理后面的真实服务上的套接字.

两个代理套接字上的send和recv窗口大小设置为1024字节.

对此有何影响?这个配置有多慢?我是否应该努力改变服务以使用命名管道(或其他IPC机制),或者localhost TCP套接字在很大程度上是一个有效的IPC?

这两个应用程序的合并不是一种选择.现在我们坚持使用两个流程配置.

编辑:在同一硬件上进行两个独立过程的原因是100%经济性.我们只有一台服务器,我们不打算获得更多(没有钱).

TCP服务是Visual Basic 6中的遗留软件,它超出了我们的预期.代理是C++.我们没有时间,金钱和人力来重写和迁移VB6代码到现代编程环境.

代理是我们尝试缓解服务的特定性能问题,这是我们不时会遇到的DDoS攻击.

代理是开源的,这是项目源代码.

sockets windows performance named-pipes

37
推荐指数
4
解决办法
4万
查看次数

我可以将哪个Python用户界面库用于2D游戏?

我想在Python上用繁重的用户界面创建一个2D游戏:窗口,按钮,文本输入等.到目前为止,我一直在使用PyGame进行一些简单的游戏.

游戏是2D MUD,标准渲染循环在屏幕上绘制内容.我需要用户界面与销售,铁匠等游戏实体进行交互.

我正在寻找像Pygame和wxPython/pyQT/pyGTK混合的东西.

我可以使用哪些库?

python user-interface pygame

17
推荐指数
2
解决办法
4440
查看次数

如何在我的程序中找到"const char*+ int"表达式

我正在进行源代码迁移,转换器程序没有使用整数转换嵌入字符串的串联.现在我有很多代码用这种表达式:

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++编译器会输出错误.

是否有任何工具可以在源代码上自动找到这样的表达式?

c c++ migration vb6-migration

12
推荐指数
3
解决办法
1194
查看次数

Python str视图

我有一个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的指针?

编辑:我们有buffermemoryview在Python 2和Python 3中,但memoryview没有展示与stror或相同的界面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)

python memory python-2.x python-3.x

10
推荐指数
1
解决办法
1987
查看次数

如何使用SWIG生成跨平台接口?

我用SWIG(Python作为目标)包装一个库.库函数包含数据类型为"uint32_t","uint8_t"等的参数.我想尽可能创建跨平台的接口,所以我想在我的interface.i文件中使用原始函数签名.例如:

uint32_t func(uint32_t a, uint32_t b);
Run Code Online (Sandbox Code Playgroud)

我试图解决的问题是,除非有一大口将无法识别该参数为整数typedefuint32_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_tlong正常?

c python swig gcc

7
推荐指数
1
解决办法
2281
查看次数

如何手动提交托管事务

我得到了一个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?

java hibernate seam transactions jta

6
推荐指数
1
解决办法
1万
查看次数

变量"a"的范围是什么?

可能重复:
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"的范围是什么?

python

2
推荐指数
1
解决办法
1104
查看次数

如何为const char*和int重载operator +

我知道这很愚蠢,但我正在自动迁移一些代码.我的源语言允许字符串和整数之间的隐式转换,例如,这是允许的:

var = "hello " + 2
print(var) # prints "hello 2"
Run Code Online (Sandbox Code Playgroud)

可我怎么在C++重载+运算符const char*int?我收到错误:

错误:'std :: string operator +(char*const&,int)'必须具有类或枚举类型的参数

c++ vb6-migration c++11

0
推荐指数
1
解决办法
1838
查看次数