Is it possible to bypass the network routines provided by ICE? And using my own socket server framework? I've read the source, with such question in mind, but the result turns out to be quite frustrating. First the socket operation is done with thread pool, and the thread pool itself is also less optimized under win32, and the coding is hard to read due to VERY::VERY::LONG::FUNCTION::NAMES. so the challenge seems big for any ICE developer searching for a good socket performance.
I haven't run any benchmark against ICE to check its socket performance, so what I say might be inaccurate, just reading the code would draw some basic conclusion: obviously we wouldn’t expecting something more than 5K connections under win32, things might be similar in Unix since neither epoll is implemented. So before I tried to do sth with ICE's network modules, I thought it might be ZeroC's intention to give a basic socket implementation as example, encouraging users to do their own homework, but after reading the Network.cpp, TCPxxx.cpp stuff I thought I was wrong.
It might be harsh for a new user of ICE to comment on such a big topic, after reading the code & manual for just a day, I might not say everything correctly, but judging from my previews experience with network programming, I think ICE 's network module is quite weak, at least no modern socket model has been used.
ICE might not be the only project suffered from this problem, under the ambicion of taking over all platform , but end up giving some basic socket wrappers that is … although workable, would bring in a hard time for any 10K situation (which is quite common in today's internet environment) . That's the same reason why I write my own IOCP that handles 65535+ but never use Qt's socket wrapper. Things are harder in ICE because its network is hard to bypass…..
I've actully searched about other user's comment throughout the forum, the expectation for modern socket model is high, so I may not be the only one. And I noticed a suggestion about using Glacier or something to behave like a proxy , this is actually feasible, but since Glacier2 itself uses network.cpp, so rewritting everything is the only choice, and handling all kinds of detail still unknown to me.
ICE is a nice engine, Slice compiler is nice and handy, the 1800+ document tells a promising company. Only if ICE gives a clean framework not so huge, if it has everything, then it might be hard to keep everything state-of-art. Actually I supposed to see the end of ICE when mutable realms got down in 2004, but ICE still alive and gets better, so I except more now, if some guys could convice me, I might eventually be a licencee.

. And I noticed a suggestion about using Glacier or something to behave like a proxy , this is actually feasible, but since Glacier2 itself uses network.cpp, so rewritting everything is the only choice, and handling all kinds of detail still unknown to me.
Reply With Quote
but since ICE wraps both distributed object and network communication , so it might be harder for end-user to make a choice, a side-by-side example is: ACE itself is a network communication layer, distributed logic is done by TAO. In my last post, I do mention something about ICE's network module as LESS MODERN, by saying that I mean not being able to see a socket model that could handle more than 10K users. This comment is reasonable since the expectation for how many concurrent users a single server-box could possibly handle has been rewritten remarkably in recent years, now a well-written IOCP server working under Win2003 could handle almost 100K users before non-pages resources ran out. 